بىر ۋاكالەتچى HTML نى مۇۋەپپەقىيەتلىك ئېلىپ كېلەلەيدۇ، ئەمما سۈرەتنى C++ بۇفېرىغا كۆچۈرگەندە ئۇنى بۇزۇپ قويۇشى مۇمكىن. ۋاكالەتچى پروتوكولىنى ئۆزگەرتىشتىن بۇرۇن، قوبۇل قىلىش callback نى ۋە ئۇنىڭ مۇھىتى قىلىپ ئۆتكۈزۈلگەن ئوبيېكتنى تەكشۈرۈڭ.

CURLOPT_WRITEDATA يېزىش callback غا كۆرسەتكۈچ بېرىدۇ. ئۆزىڭىز ياسىغان callback بولمىسا، libcurl نىڭ كۆڭۈلدىكى يازغۇچىسى FILE * نى كۈتىدۇ. &response غا ئوخشاش ئادرېس، بۇ يەردە response بىر std::string، پەقەت callback ىڭىز بۇ مۇھىتنى مەقسەت قىلىنغان تىپقا قايتۇرغاندىلا مەنىلىك بولىدۇ.

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

ئىككى يېرىمىنى يۆتكەش ئۈچۈن ئىشلىتىلىدىغان ئاددىي تۇتقۇچقا تىزىملىتىڭ:

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

append چاقىرىقى بېرىلگەن بايت سانىنى ئىشلىتىدۇ. callback سانلىق مەلۇماتى null بىلەن ئاخىرلاشمايدۇ، سۈرەتتە نۆل بايت بولۇشى مۇمكىن؛ strlen بىلەن ئۆلچەش بەدەننىڭ بىر قىسمىنى يوقىتىدۇ. ئىنكاس ھەر خىل چوڭلۇقتىكى كۆپلىگەن callback چاقىرىقلىرى ئارقىلىقمۇ كېلىشى مۇمكىن.

ئىشلىتىلگەن بايت سانىنى قايتۇرۇش پارچىنى قوبۇل قىلىدۇ. باشقا ساننى قايتۇرۇش يۆتكەشنى يېزىش خاتالىقى بىلەن توختىتىدۇ. ئالاھىدە ھالەت قوغدىغۇچىسى ئەسلىھە ئاجرىتىش مەغلۇبىيىتىنىڭ C callback چېگرىسىدىن چىقىپ كېتىشىنى توسىدۇ؛ چاقىرغۇچى response نى تولۇق ھۆججەت دەپ قاراشتىن بۇرۇن يۆتكەش نەتىجىسىنى تەكشۈرۈشى كېرەك.

يۆتكەش تۈگىگۈچە تىزىقنى تىرىك تۇتۇڭ. ئەگەر ئاسىنخرون سوكېت يېزىشى كېيىن ئۇنىڭ مەزمۇنىنى يەتكۈزسە، ئۇ يېزىش تۈگىگۈچە بۇ بايتلارنى تىرىك تۇتۇڭ. چوڭ ئىنكاسلار ئۈچۈن پۈتۈن بەدەننى توپلاشتىن كۆرە چەكلەنگەن ئېقىم تەرتىپى ئەۋزەل.

مۇناسىۋەتلىك ماقالىلەر