libcurl遇到http的chunked问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了libcurl遇到http的chunked问题相关的知识,希望对你有一定的参考价值。

参考技术A 在使用libcurl的时候,我采用的是http-parser.c进行数据解析,结果一直报chunked size不正确,于是开始了查问题的艰难旅程,原来服务器端采用的是 Transfer-Encoding: chunked 模式,这种模式是不返回content-length的,而我不知道为什么libcurl返回的数据包里没有包含chunked的开始和结束标志,这就导致http-parser解析失败,找到了问题,那就要想想解决办法了。

办法一:打算采用Connection:keep-alive的方法,结果发现这个是HTTP1.0的老办法,在HTTP1.1中已经不这么使用了,于是查找发现,libcurl在7.25.0之后提供了curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);这个方法,本想用这个试一下,结果发现,我的服务器版本是7.19.7,不能用,只得另觅方法。

办法二:也是在网上找到的答案,根据资料提示说,如果采用HTTP1.0和服务器通讯,那么服务器会放弃采用chunked的方式响应,抱着试一试的想法试了一下,curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);结果发现真的可行,最后也是采用这个办法。

办法三:使用curl_easy_setopt(curl, CURLOPT_HEADER,           0);设置这个参数后,libcurl不会返回header头,只返回body内容给用户,如果body内容是Json格式,那么就直接解析Json内容,不用解析html内容了。

以上是查找问题的过程以及办法,希望对大家有所助益。

以上是关于libcurl遇到http的chunked问题的主要内容,如果未能解决你的问题,请参考以下文章

libcurl (c api) READFUNCTION for http PUT 永远阻塞

关于libcurl模拟提交form

org.apache.http.TruncatedChunkException: Truncated chunk

模拟http请求 带 chunked解析办法一

win10+python3.5,使用requests抓取信息遇到chunked乱码的诡异问题。python2.7则不乱码

如何将 libcurl 与 dev c++ 静态链接?