Taka ímóti binærum libcurl-svarum í C++ std::string
Sendið std::string sum callback-samhengi og bætið eykum bytaríkningum við, tá ið tit taka ímóti binærum døtum við libcurl.
Ein proxy kann fáa HTML væl og kortini oyðileggja eina mynd, meðan hon avritar hana í ein C++-buffer. Áðrenn tú broytir proxy-protokollina, skoða móttøku-callbackið og lutin, sum verður sendur sum samhengi tess.
CURLOPT_WRITEDATA veitir ein peikara til skriva-callbackið. Uttan ein serstakan callback væntar standard-skrivarin í libcurl ein FILE *. Ein adressa sum &response, har response er ein std::string, hevur bert meining, tá tín callback kastar hetta samhengið aftur til tað ætlaða slagið.
static size_t receive(char* data, size_t size,
size_t count, void* context) {
const size_t bytes = size * count;
auto* body = static_cast<std::string*>(context);
try {
body->append(data, bytes);
} catch (...) {
return 0;
}
return bytes;
}Skráset báðar helvtar á ta einfaldu handfarið, sum verður brúkt til flytingina:
std::string response;
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, receive);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response);Kallið append brúkar bytaríkningin, sum varð veittur. Callback-døtur eru ikki null-termineraðar, og ein mynd kann hava null-bytar; at mála hana við strlen fór at missa ein part av kroppinum. Eitt svar kann eisini koma gjøgnum nógv callback-køll av ymiskum støddum.
At geva tí brúkta bytaríkningin aftur góðtekur bútin. At geva eina aðra ríkning aftur steðgar flytingini við einum skrivivillu. Undantaksverjan forðar eini minnisveitingarbresti frá at sleppa út um C-callback-markið; kallarin má framvegis kanna úrslit flytingarinnar, áðrenn response verður viðgjørt sum ein fullkomin fíla.
Halt strengin livandi, til flytingin er liðug. Um ein asynkron socket-skriving síðani sendir innihaldið víðari, halt tá bytar livandi, til tann skrivingin eisini er liðug. Fyri stór svar er ein avmarkað streymisskipan at fyribera fram um at savna allan kroppin.