1

最近、libcurlを使用してインターネットからWebページを取得するプログラムを構築しています.チャンクエンコーディングを使用した応答で、libcurlがチャンクヘッダーを取得できないことがわかりました.次に、libcurlオンラインドキュメントを調べたところ、WriteFunctionによるチャンクヘッダータックルと書かれていますlibcurl バージョン 2.18 を使用しています。CURLOPT_WRITEFUNCTION と CURLOPT_HEADERFUNCTION のコールバックを設定しました。チャンク ヘッダーに関する単一の文字以外は何も取得していません。チャンク エンコーディングを使用する libcurl に問題はありますか? 正しく動作させるにはどうすればよいですか?ありがとう ps 私が取得しようとしている Web はhttp://list.taobao.com/browse/cat-0.htmです。gbk エンコーディングを使用する中国語の Web サイトです。

ここに私がcliburlに行った設定があります

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);

//ここに他の何かがあります

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_);  

コールバックは必要に応じて宣言されています。 debugfunction に渡されたバッファにはチャンク長がありますが、 writefunction にはありません。 writefunction でそれを取得するにはどうすればよいですか

4

1 に答える 1

0

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

それでもデータが取得されない場合は、何らかの問題/バグ/問題があります...

于 2011-11-13T21:58:52.987 に答える