在使用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内容了。
以上是查找问题的过程以及办法,希望对大家有所助益。
网友评论