Linux C获取网页title

1. http 的知识,你需要使用 HTTP GET/POST 请网页

2. 把网页请求下来,会得到一个 html,然后解析它

3. 解析网页之后找到用户名与密码字段,最后打包出一个 HTTP POST 请求,完成用户名和密码提交

4. 服务器会返回一个 HTTP 回应,你解析相应的 html 判断正确与否

实践证明上面的思路是对HTTP协议不了解的结果,这样做的话基本上是做不出来的。

客户端请求

GET / HTTP/1.1 Host:www.google.com

获得服务器的网页源码

根据源码信息处理字符串获得其中的title里面的内容。

Windows下的实现:

发送的字符串处理


  1. /*  
  2.     * 分离url中的主机地址和相对路径  
  3.     */   
  4.     strcpy(myurl, url);   
  5.     for (pHost = myurl; *pHost != '/' && *pHost != '\0'; ++pHost);   
  6.     if ( (int)(pHost - myurl) == strlen(myurl) )   
  7.         strcpy(GET, "/");   
  8.     else   
  9.         strcpy(GET, pHost);   
  10.     *pHost = '\0';   
  11.     strcpy(host, myurl);  //myurl copy to struct struct hostent just like www.baidu.com   
  12.     printf("%s\n%s\n", host, GET);   
  13.      

网络端口socket的初始化

  1. /*  
  2. * 设定socket参数,并未真正初始化  
  3. */   
  4. sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);   
  5. pURL = gethostbyname(host);   
  6. addr.sin_family = AF_INET;   
  7. addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);   
  8. addr.sin_port = htons(80);   

发送http协议的规定

  1. /*  
  2. * 组织发送到web服务器的信息www.linuxidc.com  
  3. * 为何要发送下面的信息请参考HTTP协议的约定  
  4. */   
  5. strcat(header, "GET ");   
  6. strcat(header, GET);   
  7. strcat(header, " HTTP/1.1\r\n");   
  8. strcat(header, "HOST: ");   
  9. strcat(header, host);   
  10. strcat(header, "\r\nConnection: Close\r\n\r\n");   

连接到服务器并发送

  1. /*  
  2. * 连接到服务器,发送请求header,并接受反馈(即网页源代码www.linuxidc.com)  
  3. */   
  4. connect(sockfd,(SOCKADDR *)&addr,sizeof(addr));   
  5.   
  6. send(sockfd, header, strlen(header), 0);   

处理字符串的主要实现:

  1. while ( recv(sockfd, text, BUFSIZ, 0) > 0)   
  2.     {   
  3.           
  4.         if (q=strstr(text,"<title>"))  
  5.         {         
  6.             q+=7;  
  7.             if((p=strtok(q,"</title>")))  
  8.             {  
  9.                 printf("%s\n",p);  
  10.             }  
  11.         }  
  12.         //printf("%s",text);   
  13.         //memset(text,0,sizeof(text));   
  14.     }   

Linux下的实现类似,主要是在发送接收一些接口的修改,自己动手做提高会更高。

我本人就是根据上面的源码进行修改,查询,才完成的,对于Linux下socket的应用真的是太广泛了,以前没有发现这么强大的socket,只是停留在表面没有沉到湖底领略无线风光,真的是感觉自己浪费了太多的时间了,没有好好的深入研究,以前也太浮躁了,自以为这些都很简单,殊不知难以完成。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值