最近、私は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関数で取得できますか?
は、オプションのCURLOPT_DEBUGFUNCTIONとCURLOPT_HTTP_TRANSFER_DECODINGを試してみましたか? – rushman
ああ、今回は何かが得られました。レスポンスボディに入っている16進数の4バイトの整数文字列があります。これはチャンク長さですか?これはデバッグ機能で得られ、writefunctinが呼び出されると整数がなくなりますこの長さは、特定のAPIを呼び出すことによって?または私はデバッグ機能でそれを読むことができますか?ありがとう – zorroii
あなたのコードを投稿できますか? – rushman