使用libcurl库获取网页信息(C++ php)

这周要做一个小项目,需要获得学生的账户名密码后,去本校教务系统验证是否正确并且抓一个网页信息下来。
查网上时候,可以通过发送POST或GET请求来实现,然后尝试用POST先。
首先安装libcurl库

sudo yum install libcurl

安装好后之后代码中添加头文件curl/curl.h就可以使用curl的函数了。

当时需要访问的正方网页(222.24.62.120)需要验证码,但是有另一个网站222.24.162.120/default4.aspx 可以用来验证帐号密码是否正确,从这个网站上拿到Cookie然后带着Cookie去访问正方网站就可以进去了。

然后我们来看看进入网页发送的请求包内容。

这里写图片描述

这个是带着帐号密码访问该网站时发送的请求包,图中Request Headers是发送包头部信息,Form Data下面还有两个信息分别是帐号密码,它里面是发送包的数据部分,代码访问网站就是模拟这个过程,将这些信息手动加入,然后打包发出去。

过程中用到一共三个函数:
curl_slist_append();
curl_easy_init();
curl_easy_setopt();
curl_easy_perform();
curl_easy_cleanup();

1.curl_easy_init()

函数原型

CURL *curl_easy_init();

函数功能

初始化一个CURL指针,相应的末尾要清理这个指针。

2.curl_easy_setopt()

函数原型

CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);

函数功能

这个参数很重要,要通过它对访问过程做很多设置。基本都是通过第二个参数在设置,所以第二个参数牵扯到很多宏,下面列几个我用到的。

重要宏(option)
  • CURLOPT_HTTPHEADER 用来设置HTTP头部字段,第三个参数是一个数组,包含了所有头部信息
  • CURLOPT_COOKIEJAR 指定连接结束后保存Cookie信息的文件
  • CURLOPT_COOKIEFILE 指定读取Cookie的文件
  • CURLOPT_URL 设置要访问的URL
  • CURLOPT_WRITEDATA 指定将网页信息写进去的文件
  • CURLOPT_POSTFIELDS 全部数据使用HTTP协议中的POST操作来发送。第三个数据指定要发送发送数据。
  • CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

3.curl_easy_perform()

函数原型

CURLcode curl_easy_perform( CURL *easy_handle);

该函数完成curl_easy_setopt指定的所指定的值,返回0意味一切ok,非0代表错误发生。主要错误码说明:
1.CURLE_OK
任务完成一切都好
2.CURLE_UNSUPPORTED_PROTOCOL
不支持的协议,由URL的头部指定
3.CURLE_COULDNT_CONNECT
不能连接到remote 主机或者代理
4.CURLE_REMOTE_ACCESS_DENIED
访问被拒绝
5.CURLE_HTTP_RETURNED_ERROR
Http返回错误
6.CURLE_READ_ERROR
读本地文件错误

1.curl_easy_cleanup()

函数原型

void curl_easy_cleanup(CURL *handle);

函数功能

结束licurl使用时,清理掉curl_easy_init的指针。

6.curl_slist_append()

函数原型

struct curl_slist *curl_slist_append(struct curl_slist *list, const char *string);

函数功能

追加字符串string到链表list尾,返回添加后的链表,在代码中用来将头部信息逐句添加到字符串中。

这一段便可访问到222.24.162.120/default4.aspx 的网站,然后获取到Cookie数据存入文件。

bool postUrl(const char *filename, std::string id, std::string passwd )
{
    CURL *curl;    
    CURLcode res;
    FILE *fp;
    std::string mess = "__VIEWSTATE=dDwxMTE4MjQwNDc1Ozs%2BYofaNxf5dpXqcC3ZAqYdKfPCdbw%3D&TextBox1=" 
        + id + "&TextBox2=" + passwd + "&RadioButtonList1=%D1%A7%C9%FA&Button1=+%B5%C7+%C2%BC+";


    
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值