libcurl遇到http的chunked问题


在使用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内容了。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容