Wakili na iya samun HTML cikin nasara kuma duk da haka ya lalata hoto yayin da yake kwafa shi cikin buffer na C++. Kafin ka canza ka'idar wakili, duba kiran karɓa da abin da aka aika a matsayin mahallinsa.

CURLOPT_WRITEDATA yana ba da mai nuni zuwa kiran rubutu. Ba tare da kiran da aka keɓance ba, marubucin tsoho na libcurl yana tsammanin FILE *. Adireshi kamar &response, inda response std::string ne, yana da ma'ana ne kawai lokacin da kiran ka ya mayar da wannan mahallin zuwa nau'in da aka nufa.

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;
}

Yi rijistar rabi biyu a kan sauƙaƙƙen hannun da ake amfani da shi don canja wuri:

std::string response;
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, receive);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response);

Kiran append yana amfani da ƙididdigar byte da aka bayar. Bayanan kira ba su ƙare da sifili ba, kuma hoto na iya ƙunshi byte sifili; auna shi da strlen zai ɓatar da wani ɓangare na jiki. Amsa kuma na iya zuwa ta cikin kira da yawa na girma dabam dabam.

Mayar da ƙididdigar byte da aka cinye yana karɓar guntun. Mayar da wata ƙididdiga dabam tana dakatar da canja wurin da kuskuren rubutu. Mai kiyaye keɓancewa yana hana gazawar rabo tserewa ta iyakar kiran C; mai kira dole ne ya duba sakamakon canja wurin kafin ya ɗauki response a matsayin cikakken fayil.

Ka riƙe igiyar da rai har sai canja wurin ya ƙare. Idan rubutun soket ɗin da ba na lokaci ɗaya ya tura abin da ke cikinsa gaba, ka riƙe waɗannan byte ɗin da rai har sai wannan rubutun ma ya kammala. Don manyan amsoshi, tsarin yawo mai iyaka ya fi tara dukan jiki.

Labarai masu alaƙa