2011-11-12 15 views
1

最近、私はlibcurlでインターネットからウェブページを取得するプログラムをビルドしています。チャンクエンコードを使用したレスポンスでは、libcurlがチャンクheader.thenを取得できないことがわかりました。私はlibcurlバージョン2.18を使用していますが、CURLOPT_WRITEFUNCTIONとCURLOPT_HEADERFUNCTIONのコールバックを設定しましたが、チャンクヘッダーについての1つのchar以外は何も得ていません。チャンクエンコーディングのlibcurlに関する問題はありますか?どうすれば正しく動作させることができますか?ありがとうp.s.私はつかむしようとしていますウェブがhttp://list.taobao.com/browse/cat-0.htmあり、それはここGBKエンコーディングlibcurlプロセスチャンクレスレス

を使用して、中国のウェブサイトの私がここ

int32_t progress = 0; 
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_NOPROGRESS, progress) == CURLE_OK); 
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_HEADER, 1) == CURLE_OK); 
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_DEBUGFUNCTION, &HttpSpider::curl_debug_callback) == CURLE_OK); 
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_HTTP_TRANSFER_DECODING, 1) == CURLE_OK); 
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_WRITEFUNCTION, &HttpSpider::_ProcessRecvString) == CURLE_OK); 
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_HEADERFUNCTION, &HttpSpider::_ProcessRecvHeader) == CURLE_OK); 
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_PROGRESSFUNCTION, &HttpSpider::_ProcessRecvProgress) == CURLE_OK); 

//をcliburlするために作られた設定は、他の気にいら

result = curl_easy_setopt(inst->handle_, CURLOPT_HTTPGET, 1); 
result = curl_easy_setopt(inst->handle_, CURLOPT_PROGRESSDATA, param); 
result = curl_easy_setopt(inst->handle_, CURLOPT_WRITEDATA, param); 
result = curl_easy_setopt(inst->handle_, CURLOPT_WRITEHEADER, param); 
result = curl_easy_setopt(inst->handle_, CURLOPT_URL, *url); 

printf("/**********  HTTP GET  **********/\n"); 
//try to perform a post action 
result = curl_easy_perform(inst->handle_); 

コールバックがされています必要に応じて宣言され、バッファ内のチャンク長がdebug関数に渡されますが、write関数ではなく、どのようにしてwrite関数で取得できますか?

+0

は、オプションのCURLOPT_DEBUGFUNCTIONとCURLOPT_HTTP_TRANSFER_DECODINGを試してみましたか? – rushman

+0

ああ、今回は何かが得られました。レスポンスボディに入っている16進数の4バイトの整数文字列があります。これはチャンク長さですか?これはデバッグ機能で得られ、writefunctinが呼び出されると整数がなくなりますこの長さは、特定のAPIを呼び出すことによって?または私はデバッグ機能でそれを読むことができますか?ありがとう – zorroii

+0

あなたのコードを投稿できますか? – rushman

答えて

0

libcurlアプリケーションが何もしなくても、自動的かつ無条件にチャンクエンコードをサポートします。

あなたはまだ任意のデータを取得しない場合は、問題/バグ/問題のいくつかの種類があります...

関連する問題