1
最近我正在用libcurl構建一個從網上抓取網頁的程序,我發現當使用分塊編碼的響應時,libcurl無法獲取塊頭。然後我查看libcurl在線文檔,它說通過WriteFunction處理塊頭問題,我使用libcurl版本2.18,並且爲CURLOPT_WRITEFUNCTION和CURLOPT_HEADERFUNCTION設置了回調,它們除了關於塊頭的單個字符以外都只有一個字符,是否有關於libcurl和塊編碼的問題?我怎樣才能使它正常工作?感謝p.s.我試圖抓住網絡是http://list.taobao.com/browse/cat-0.htm,這是一箇中國的網站使用GBK編碼libcurl process chunked response
此處設置我做出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_);
回調是根據需要聲明,緩衝區中的塊長度傳遞給調試功能,但沒有寫入函數,我如何在寫入函數中獲得它
您是否嘗試過的選項CURLOPT_DEBUGFUNCTION和CURLOPT_HTTP_TRANSFER_DECODING? – rushman
啊,這次我得到了東西,在hex中有一個4字節的整數字符串來響應正文,這是塊長度的權利?我在調試函數中得到了這個,並且當writefunctin被調用時,整數消失了,我可以得到這個長度通過調用某個api?或者我只能在調試功能中讀取它?謝謝 – zorroii
你可以發佈你的代碼嗎? – rushman