Proxy wuxuu si guul leh u heli karaa HTML oo weli wuxuu wax yeeli karaa sawir marka uu ku koobiyeeyo buffer C++. Kahor intaadan beddelin borotokoolka proxy, hubi callback-ka helista iyo shayga loo gudbiyay macnaheeda.

CURLOPT_WRITEDATA wuxuu bixiyaa tilmaame u socda callback-ka qorista. Iyada oo aan lahayn callback gaar ah, qoraaga caadiga ah ee libcurl wuxuu filayaa FILE *. Cinwaan sida &response, halkaas oo response uu yahay std::string, ayaa macne leh oo keliya marka callback-kaagu u rogo macnahaas nooca loogu talagalay.

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

Diiwaangeli labada qaybood ee gacan-qabsiga fudud ee loo isticmaalo wareejinta:

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

Wicitaanka append wuxuu isticmaalaa tirada byte ee la bixiyay. Xogta callback ma dhammaato null, sawirna wuxuu yeelan karaa byte eber; ku cabbiridda strlen waxay lumin lahayd qayb ka mid ah jirka. Jawaab sidoo kale waxay iman kartaa iyada oo loo marayo wicitaanno badan oo cabbirro kala duwan.

Soo celinta tirada byte ee la isticmaalay waxay aqbawsaa qaybta. Soo celinta tiro kale waxay joojisaa wareejinta khalad qoris. Ilaaliyaha ka-reebista wuxuu ka hortagaa in guuldarada qoondaynta ay ka baxdo xadka callback C; wicitaanku wali waa inuu hubiyaa natiijada wareejinta ka hor inta uusan u qaadan response fayl buuxa.

Hayso xarigga oo nool ilaa wareejinta dhammaato. Haddii qoraal socket asynchronous ah uu markaas gudbiyo waxa ku jira, hayso byteskaas oo nool ilaa qoraalkaasna dhammaado. Jawaabaha waaweyn, habaynta qulqulka xaddidan ayaa ka door biddan ururinta jirka oo dhan.

Maqaallo la xiriira