Is féidir le seachfhreastalaí HTML a fháil go rathúil agus íomhá a mhilleadh fós agus í á cóipeáil isteach i maolán C++. Sula n-athraíonn tú prótacal an tseachfhreastalaí, seiceáil an t-aischur fála agus an réad a chuirtear ar aghaidh mar a chomhthéacs.

CURLOPT_WRITEDATA soláthraíonn pointeoir don aischur scríofa. Gan aischur saincheaptha, tá scríbhneoir réamhshocraithe libcurl ag súil le FILE *. Ní bhíonn ciall le seoladh mar &response, áit a bhfuil response ina std::string, ach amháin nuair a chaitheann d'aischur an comhthéacs sin ar ais chuig an gcineál beartaithe.

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

Cláraigh an dá leath ar an láimhseáil shimplí a úsáidtear don aistriú:

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

Úsáideann an glao append an comhaireamh beart a seachadadh. Níl sonraí an aischuir críochnaithe le nialas, agus is féidir le híomhá bearta nialasacha a bheith inti; chaillfeadh tomhas le strlen cuid den chorp. Is féidir freagra a theacht freisin trí go leor aischur de mhéideanna éagsúla.

Glacann filleadh an chomhaireamh beart a ídíodh leis an smután. Má fhilltear comhaireamh difriúil, cuirtear an t-aistriú ar ceal le earráid scríofa. Coisceann an garda eisceachta ar theip leithdháilte éalú thar theorainn aischur C; caithfidh an glaoiteoir toradh an aistrithe a sheiceáil fós sula gcaitear le response mar chomhad iomlán.

Coinnigh an teaghrán beo go dtí go gcríochnóidh an t-aistriú. Má sheolann scríobh socaid asincrónach a inneachar ar aghaidh ansin, coinnigh na bearta sin beo go dtí go gcríochnóidh an scríobh sin freisin. I gcás freagraí móra, is fearr socrú sruthaithe teoranta ná an corp iomlán a charnadh.

Ailt ghaolmhara