Nirċievu risposti binarji libcurl f'std::string C++
Għaddi std::string bħala kuntest tal-callback u żid għaddiet espliċiti ta' bytes meta tirċievi data binarja bil-libcurl.
Proxy jista' jġib l-HTML b'suċċess u xorta jħassar immaġni waqt li jikkupjaha f'buffer C++. Qabel ma tbiddel il-protokoll tal-proxy, iċċekkja l-callback tal-irċevuta u l-oġġett li jgħaddi bħala l-kuntest tiegħu.
CURLOPT_WRITEDATA jipprovdi pointer għall-callback tal-kitba. Mingħajr callback personalizzat, il-kittieb default tal-libcurl jistenna FILE *. Indirizz bħal &response, fejn response huwa std::string, jagħmel sens biss meta l-callback tiegħek jikkonverti dak il-kuntest lura għat-tip maħsub.
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;
}Irreġistra ż-żewġ nofsijiet fuq il-hande sempliċi użat għat-trasferiment:
std::string response;
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, receive);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response);Is-sejħa append tuża l-għadd ta' bytes mogħti. Id-data tal-callback mhix terminata b'null u immaġni tista' jkun fiha bytes żero; il-kejl bl-strlen jitlef parti mill-ġisem. Risposta tista' wasal ukoll permezz ta' ħafna sejħiet ta' daqsijiet differenti.
Ir-ritorn tal-għadd ta' bytes użati jaċċetta l-biċċa. Ir-ritorn ta' għadd differenti jwaqqaf it-trasferiment b'żball tal-kitba. Il-gwardjan tal-eċċezzjonijiet iżomm falliment ta' allokazzjoni milli jaħrab mill-fruntiera tal-callback C; min isejjaħ xorta jrid jiċċekkja r-riżultat tat-trasferiment qabel ma jqis response bħala fajl sħiħ.
Żomm is-string ħaj sa ma jitlesta t-trasferiment. Jekk kitba asinkronika tas-socket mbagħad tgħaddi l-kontenut tagħha, żomm dawk il-bytes ħajjin sa ma titlesta wkoll dik il-kitba. Għal risposti kbar, arranġament ta' streaming limitat huwa preferibbli milli takkumula l-ġisem kollu.