Ukuthola izimpendulo ze-binary ze-libcurl ku-C++ std::string
Dlulisa i-std::string njengomongo we-callback bese wengeza izibalo zamabhayithi ezicacile lapho uthola idatha ye-binary nge-libcurl.
I-proxy ingathola i-HTML ngempumelelo futhi yonakalise isithombe lapho ikopisha ku-buffer ye-C++. Ngaphambi kokushintsha i-proxy protocol, hlola i-callback yokwamukela kanye nento edluliswa njengomongo wayo.
CURLOPT_WRITEDATA inikeza isikhombisi ku-callback yokubhala. Ngaphandle kwe-callback yangokwezifiso, umbhali ozenzakalelayo we-libcurl ulindele FILE *. Ikheli elifana ne-&response, lapho i-response iyi-std::string, linengqondo kuphela lapho i-callback yakho iguqula lowo mongo ibuyele ohlotsheni oluhlosiwe.
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;
}Bhalisa zombili izingxenye ku-handle elula esetshenziswa ekudlulisweni:
std::string response;
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, receive);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response);Ucingo lwe-append lusebenzisa isibalo samabhayithi esinikeziwe. Idatha ye-callback ayipheli nge-null, futhi isithombe singaqukatha amabhayithi angu-zero; ukukala nge-strlen kuzolahlekelwa ingxenye yomzimba. Impendulo ingafika futhi ngezingcingo eziningi zosayizi ohlukene.
Ukubuyisela isibalo samabhayithi asetshenzisiwe kwamukela ucezu. Ukubuyisela esinye isibalo kumisa ukudluliswa ngephutha lokubhala. Umgadi we-exception uvimbela ukwehluleka kokwabiwa ukuba kuphume ngomngcele we-C callback; umshayeli kusamele ahlole umphumela wokudluliswa ngaphambi kokuthatha i-response njengefayela eliphelele.
Gcina intambo iphila kuze kuphele ukudluliswa. Uma ukubhala kwe-socket okungahambisani nekhompyutha kudlulisa okuqukethwe kwayo, gcina lawo mabhayithi ephila kuze kuphele nalokho kubhala. Ezimpendulweni ezinkulu, ukuhlelwa kokusakaza okunomkhawulo kungcono kunokuqoqa wonke umzimba.