In proxy kin HTML mei súkses helje en dochs in ôfbylding skansearje wylst er dy yn in C++-buffer kopiearret. Kontrolearje foardat jo it proxyprotokol feroarje de ûntfangst-callback en it objekt dat as syn kontekst trochjûn wurdt.

CURLOPT_WRITEDATA leveret in wizer nei de skriuw-callback. Sûnder in oanpaste callback ferwachtet de standertskriuwer fan libcurl in FILE *. In adres lykas &response, wêrby't response in std::string is, hat allinnich sin as jo callback dy kontekst weromcastet nei it bedoelde type.

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

Registrearje beide helten op de ienfâldige hânhing dy't foar de oerdracht brûkt wurdt:

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

De oprop append brûkt de levere bytetelling. Callback-gegevens binne net nul-beëinige en in ôfbylding kin nul-bytes befetsje; mjitten mei strlen soe in part fan it lichem ferlieze. In antwurd kin ek fia in protte callbacks fan ferskillende grutte binnenkomme.

It weromjaan fan 'e brûkte bytetelling akseptearret it stik. It weromjaan fan in oare telling brekt de oerdracht ôf mei in skriuwflater. De útsûnderingswacht hoedt derfoar dat in tawizingsflater troch de C-callbackgrins ûntkomt; de oanropper moat dochs it oerdrachtsresultaat kontrolearje foardat response as in folsleine triem behannele wurdt.

Hâld de tekenrige libbend oant de oerdracht klear is. As in asynkrone socket-skriving dêrnei de ynhâld trochstjoert, hâld dy bytes dan libbend oant dy skriuwing ek foltôge is. Foar grutte antwurden is in beheinde streaming-opset te ferkiezen boppe it gearbringen fan it hiele lichem.

Relatearre artikelen