怎么通过C语言读取网页里面的数据

怎么通过C语言读取网页里面的数据,第1张

简单的请求格式

GET /index.php HTTP/1.0

host:www.zixue7.com

当我们和服务器连接上之后,发送上面的数据过去,服务器就会返回 index.php 这个页面给我们。

GET 这个 是表示 以什么方式请求,HTTP中还有很多其他的请求方式,常用的就 GET POST (更详细的 可以点开上面 http协议 那个链接)

GET 后面紧跟一个空格 然后 给出,要获取的资源的名称, /index.php 就表示获取网站服务器根目录下 index.php 执行后所产生的内容,我们也可以改成 GET / HTTP/1.0 这就表示获取默认首页的内容 。 GET /1.html HTTP/1.0 就是获取 服务器根目录下 1.html的内容,很容易理解吧。

接下来隔一个空格 跟上 HTTP/1.0 表示 http协议的版本,这个是固定的 。

第二行 host:www.zixue7.com 用来指定 访问哪个主机。 大家都知道,一个服务器可以放很多个网站,每个网站有不同的域名,所以我们需要用这个host来指定 我们要访问的是哪个网站,这样 才能正确得访问到我们想访问的网站。

第一步,连接服务器。

第二步,按照http协议,发送请求数据,然后就是接受返回的内容。

没错,就这么简单。

在编写程序之前,我们先用一个小工具来模拟一下这个过程,好让我们对http协议了解更深入一些。

telnet工具 如果是 win7下的朋友 猛戳这里-->win7开启telnet功能

到此为止,我假设大家电脑上已经开启了 telnet功能,正题开始。

telnet 他是一个基于tcp/ip 协议的程序,为我们用户提供一个 与其他电脑通信的工具,我们可以使用他来和其他电脑进行连接通信。

开始->运行->输入telnet回车, 出现一个黑框如下。

我们这时就可以输入命令,来连接远程主机,比如我们这次是要连接我们自学去论坛 的服务器,

那么我们就输入 open www.zixue7.com 80 然后回车。

open 是打开的意思 后面跟上 要打开那个主机然后 后面跟上端口, web服务器默认使用的是80端口,所以 要加上80端口(不加端口 telnet默认是23端口)。

然后会出现下图的情况,这时候 我们就可以输入命令了,输入的命令都将被发送到自学去论坛的服务器上面。大家注意一下 下图红色箭头所指出的部分,那里就是一个输入光标,不用管其他的字。

这就代表 我们已经和远程主机连接上了,就相当于我们上节课中 客户端执行到 connect 函数 之后 就是要调用 send函数发送数据了,在这里 我们只需要按键盘输入到黑色窗口中 就会发送到服务端。

我们依次输入以下内容,(注意,不能按退格,输入错误了,就重新打开telnet,重新 *** 作。)

仔细看网页源代码:

<tbodyid="commRank_rankContent_350">

<tr><tdcolspan="8">数据加载中...</td></tr>

</tbody>

<scriptid="commRank_template_rankContent_350"type="text/html">

{for item in rankData}

<tr>

<td>${item.field2}</td>

<td><a href="http://lol.qq.com/act/a20111206report/list.htm?a=${item.field100}&n=${encodeURIComponent(item.field0)}" target="_blank">${item.field0}</a></td>

<td>${parseInt(item.field3)+parseInt(item.field4)}</td>

<td>${item.field3}</td>

<td>${item.field4}</td>

<td>${String(parseInt(item.field3)*100/(parseInt(item.field3)+parseInt(item.field4))).substr(0,5)}%</td>

<td>${item.field1}</td>

</tr>

{/for}

</script>

排名相关的数据都是从rankData这个里面读取出来的,在javascript里面用的应该是流行的json对象格式,直接在这个源文件里并没有找到rankData,但它引用了很多其它的js文件:

<scripttype="text/javascript"src="http://sl.qq.com/comm-htdocs/js/jquery-1.5.2.min.js"></script>

<scripttype="text/javascript"src="http://ossweb-img.qq.com/images/js/basic/templatemanager.js"></script>

<scripttype="text/javascript"src="http://sl.qq.com/comm-htdocs/js/game_area/lol_server_select.js"></script>

<scripttype="text/javascript"src="http://lol.qq.com/web201111/js/data_control.js"></script>

所以,rankData应该是定义在其它的脚本文件里面的,而里面数据应该是通过其它方法,比如ajax之类的技术动态从后台服务器取回来的,所以,你用代码并不能直接把里面的数据提取出来,这个还真不太好搞。

模拟浏览器行为,按照http协议像服务器发送请求,解析服务器返回内容,根据需要决定是否继续发送请求(比如获取该页面某个链接的内容?),如果遇到js只流,那你还要写个东东来解析js。。

总之,简单应用可以,复杂应用免谈。

Google之流的技术不是我们小作坊能比拟的。

百度cprops,这是一个c写的http库


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6636270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存