د libcurl باینري ځوابونه په C++ std::string کې ترلاسه کول
std::string د callback context په توګه ورکړئ او د libcurl سره باینري ډاټا ترلاسه کولو پر مهال روښانه بایټ شمېرې اضافه کړئ.
پروکسي کولی شي HTML په بریالیتوب سره راوړي او بیا هم د عکس په C++ بفر کې کاپي کولو پر مهال هغه خراب کړي. د پروکسي پروتوکول بدلولو دمخه، د ترلاسه کولو callback او هغه شی چې د هغې د context په توګه ورکول کیږي وګورئ.
CURLOPT_WRITEDATA د لیکلو callback ته یو اشاره ورکوي. پرته له دودیز callback، د libcurl ډیفالټ لیکونکی FILE * تمه کوي. د &response په څیر پته، چېرې چې response یو std::string دی، یوازې هغه وخت معنا لري چې ستاسو callback هغه context بیرته خپل هدف شوي ډول ته واړوي.
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 ډاټا د صفر سره نه پای ته رسیږي، او عکس کې کیدای شي صفر بایټونه وي؛ د strlen سره اندازه کول به د بدن یوه برخه له لاسه ورکړي. ځواب کیدای شي د مختلفو اندازو ډیرو callback غوښتنو له لارې هم راشي.
د کارول شوې بایټ شمېرې بیرته راګرځول هغه ټوټه مني. د بلې شمېرې بیرته راګرځول لېږد د لیکنې تېروتنې سره بندوي. د استثنا ساتونکی د حافظې د تخصیص ناکامي د C callback له حد څخه د تېښتې مخه نیسي؛ غوښتونکی باید لاهم د response د بشپړ فایل په توګه د منلو دمخه د لېږد پایله وګوري.
تر هغه چې لېږد پای ته ورسیږي تار ژوندی وساتئ. که یو غیر همغږي ساکټ لیکنه بیا د هغې منځپانګه واستوي، هغه بایټونه تر هغه چې هغه لیکنه هم بشپړه شي ژوندي وساتئ. د لویو ځوابونو لپاره، د ټول بدن راټولولو په پرتله محدوده جریاني ترتیب غوره دی.