在使用libcurl的時(shí)候,我采用的是http-parser.c進(jìn)行數(shù)據(jù)解析誊薄,結(jié)果一直報(bào)chunked size不正確玲献,于是開始了查問題的艱難旅程羽圃,原來服務(wù)器端采用的是Transfer-Encoding: chunked模式,這種模式是不返回content-length的封豪,而我不知道為什么libcurl返回的數(shù)據(jù)包里沒有包含chunked的開始和結(jié)束標(biāo)志谴轮,這就導(dǎo)致http-parser解析失敗,找到了問題吹埠,那就要想想解決辦法了第步。
辦法一:打算采用Connection:keep-alive的方法疮装,結(jié)果發(fā)現(xiàn)這個(gè)是HTTP1.0的老辦法,在HTTP1.1中已經(jīng)不這么使用了雌续,于是查找發(fā)現(xiàn)斩个,libcurl在7.25.0之后提供了curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);這個(gè)方法,本想用這個(gè)試一下驯杜,結(jié)果發(fā)現(xiàn)受啥,我的服務(wù)器版本是7.19.7,不能用鸽心,只得另覓方法滚局。
辦法二:也是在網(wǎng)上找到的答案,根據(jù)資料提示說顽频,如果采用HTTP1.0和服務(wù)器通訊藤肢,那么服務(wù)器會(huì)放棄采用chunked的方式響應(yīng),抱著試一試的想法試了一下糯景,curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);結(jié)果發(fā)現(xiàn)真的可行嘁圈,最后也是采用這個(gè)辦法。
辦法三:使用curl_easy_setopt(curl, CURLOPT_HEADER, ? ? ? ? ? 0);設(shè)置這個(gè)參數(shù)后蟀淮,libcurl不會(huì)返回header頭最住,只返回body內(nèi)容給用戶,如果body內(nèi)容是Json格式怠惶,那么就直接解析Json內(nèi)容涨缚,不用解析Html內(nèi)容了。
以上是查找問題的過程以及辦法策治,希望對(duì)大家有所助益脓魏。