windows - libcurl proces chunked respons

Indlæg af Hanne Mølgaard Plasc

Problem



for nylig bygger jeg et program, der tager fat på websider fra internettet med libcurl, jeg fandt ud af, at når svaret ved hjælp af chunked kodning, kan libcurl ikke få chunk header.then jeg kiggede på libcurl online dokumentationer, siger det chunk header tackles af WriteFunction, i jeg bruger libcurl version 2.18, og jeg har lavet en tilbagekald for CURLOPT\_WRITEFUNCTION og CURLOPT\_HEADERFUNCTION, de har fået andet end en enkelt char om chunk header, er der problemer med libcurl med chunk-kodning? Hvordan kan jeg få det til at fungere ordentligt? tak ps det web, jeg forsøger at få fat på er http://list.taobao.com/browse/cat-0.htm, det er en kinesisk hjemmeside, der bruger gbk-kodning [3]


her er indstillinger jeg lavede til 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);


//her er noget andet


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     **********/
");
//try to perform a post action
result = curl\_easy\_perform(inst->handle\_);  


tilbagekald er erklæret som krævet, hvor søjlens længde i buffer overføres til fejlfinding, men ikke i skrivefunktion, hvordan kan jeg få det i skrivefunktion

Bedste reference


libcurl understøtter chunked kodning automatisk og ubetinget uden at programmet skal gøre noget.


Hvis du ikke får nogen data stadig, er der en slags problem/fejl/problem ...