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.

Izihloko ezihlobene