用c语言访问网站,获取网页代码(了解http协议)

经过上节课 编写第一个网络程序的教程以后,我假设大家已经会编写第一个网络程序,并知道他里面的大致流程,有不懂的也可以自己去找资料解决。

这节课的内容十分的多, 要有个心里准备。

我们这课的目标就是,用c语言使用socket编程来实现获取网页的代码,在这之前 我们需要搞清楚以下两个问题。

第一:如何与服务器通信? 第二:通信后该做些什么?

第一个问题是上节课的东西,也就是 网站服务器是 服务端,我们只需要写一个客户单和他进行通信即可。

第二个问题就是本节课重点了,如何通信,按照什么规则来通信? 接下来就为大家讲简单的说下 http协议(更详细的,可以点开左边的链接看看)。

http协议,听起来好像好屌,其实就是 浏览器和服务器之间传输数据的时候 所约定的一个 数据格式。

我们只要了解了这种格式,我们就可以模拟浏览器的行为,给服务端发送特定格式的内容,他就会返回给我们特定格式的内容。

那么,这个格式是怎么样的呢?

下面是一个最简单的请求格式

    GET  /index.php HTTP/1.0
    host:www.noxue.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.noxue.com 用来指定 访问哪个主机。 大家都知道,一个服务器可以放很多个网站,每个网站有不同的域名,所以我们需要用这个host来指定 我们要访问的是哪个网站,这样 才能正确得访问到我们想访问的网站。

好了 理论的东西我们已经知道了。 上面说了那么多,下面简单整理一下: 第一步,连接服务器。 第二步,按照http协议,发送请求数据,然后就是接受返回的内容。

没错,就这么简单。

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

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

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

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

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

我们这时就可以输入命令,来连接远程主机,比如我们这次是要连接我们自学去论坛 的服务器, 那么我们就输入 open www.phpfen.com 80 然后回车。

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

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

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

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

    GET  /index.php HTTP/1.0
    host:www.noxue.com

输入了第二行之后,记得按两次回车,这是http协议的规定,后面我们写代码编程 也是要发送两个回车换行的。

然后就会收到服务端返回的内容。

telnet是个非常好玩的工具,不仅可以用来测试http协议,还有发邮件的 smtp协议 收邮件的pop3协议,都可以的,理论上所有基于tcp的协议都可以模拟。

代码实现部分

在理解上面的知识以后,结合上节课所学的东西,其实是非常简单的,只需要在上节课代码中稍作修改即可。

我就留给大家自己去修改。如果还不懂,可以看后面我放出的视频教程。祝大家成功。