怎么通过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,重新操作。)

Mysql C API编程步骤

1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:

#include <WinSock2.h>// 进行网络编程需要winsock2.h

#include <mysql.h>

#pragma comment(lib, “libmysql.lib”)

2、创建MYSQL变量。如:

MYSQL mysql

3、初始化MYSQL变量。

mysql_init(&mysql)

4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:

MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag)

参数说明:mysql–前面定义的MYSQL变量;host–MYSQL服务器的地址;user–登录用户名;passwd–登录密码;db–要连接的数据库;port–MYSQL服务器的TCP服务端口;unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制;clientflag–Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。

5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:

int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length)

参数说明:mysql–前面定义的MYSQL变量;q–SQL查询语句;length–查询语句的长度。

查询成功则该函数返回0。

6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。

两个函数的原型分别为:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql)

MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql)

这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。

7、调用mysql_fetch_row函数读取结果集数据。

上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result)

参数result就是mysql_store_result或mysql_use_result的返回值。

该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row〔i〕为第i个字段的值。当到结果集尾部时,此函数返回NULL。

8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:

void STDCALL mysql_free_result(MYSQL_RES *result)

9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock)


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/274552.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存