关于libcurl模拟提交form

因为本人对web机制了解较少,在使用C/libcurl中遇到了很多问题。主要的解决方式:

1,在网页源码中找到提交form的定位。也就是网页文件对应form中的action属性。往往都是提交到jsp或者php等脚本中运行的,而不是直接提交到本网页。

2,要注意http头http头的不同会引起网页的不同反应。我做的一个小项目,在提交到两个网址php脚本时,都因为http头引起php脚本执行不正确。

3,重定向问题。

  在一些网页中,返回的网页数据会带有重定向信息,这时要打开curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);

  以我目前掌握的,这个参数会自动跟踪http头中的重定向。这里之所以要打开,是因为重定向有一个超时参数,如果未能链接,

  也会导致网页执行出现问题。

4,关于https,在编译libcurl的时候要加入openssl的支持。

5,在代码中加入curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);可以追踪数据的传输状态。

6,如果还是解决不了,使用Fiddler抓包。相比wireshark,Fiddler抓取https的包更加方便和快捷。

7,不要太懒,在接收字节流的时候用string之类的容器。老老实实用char *或者byte *。

最后再强调一下第六条:Fiddler可以更方便地抓https,通过比对包的不同可以轻松解决碰到的各种问题。

如果您抓包之后还是无法正常获取数据的话,最后的解决方案是:

curl_easy_setopt(m_curl, CURLOPT_TCP_KEEPALIVE, 1L);

我在post一个网站的时候出现了这个问题,一样的包浏览器能获取到结果而libcurl不能。猜想深层次原因的话,应该是没有回复keeplive包导致的服务器认为连接已断开导致不会向本地发送数据。但网站的后台代码与服务器配置已经不能知晓了....

posted @ 2017-09-11 11:48  961493347  阅读(763)  评论(0编辑  收藏  举报