Proxy သည် HTML ကို အောင်မြင်စွာ ရယူနိုင်ပြီး ရုပ်ပုံကို C++ buffer ထဲသို့ ကူးယူရာတွင် ပျက်စီးစေနိုင်သေးသည်။ Proxy protocol ကို မပြောင်းလဲမီ လက်ခံရယူသော callback နှင့် ၎င်း၏ context အဖြစ် ပေးပို့သော အရာဝတ္တုကို စစ်ဆေးပါ။

CURLOPT_WRITEDATA သည် ရေးသွင်းသည့် callback သို့ pointer တစ်ခု ပေးသည်။ စိတ်ကြိုက် 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;
}

အစိတ်အပိုင်းနှစ်ခုလုံးကို လွှဲပြောင်းမှုအတွက် အသုံးပြုသည့် ရိုးရှင်းသော handle ပေါ်တွင် မှတ်ပုံတင်ပါ။

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

append ခေါ်ဆိုမှုသည် ပေးပို့ထားသော byte အရေအတွက်ကို အသုံးပြုသည်။ Callback ဒေတာသည် null ဖြင့် အဆုံးသတ်မထားဘဲ ရုပ်ပုံတွင် သုည byte များ ပါဝင်နိုင်သည်။ strlen ဖြင့် တိုင်းတာပါက ကိုယ်ထည်၏ တစ်စိတ်တစ်ပိုင်း ဆုံးရှုံးမည်။ တုံ့ပြန်ချက်သည် အရွယ်အစားမတူညီသော callback ခေါ်ဆိုမှုများစွာဖြင့်လည်း ရောက်လာနိုင်သည်။

အသုံးပြုပြီးသော byte အရေအတွက်ကို ပြန်ပေးခြင်းသည် ထို chunk ကို လက်ခံသည်။ မတူညီသော အရေအတွက်ကို ပြန်ပေးပါက ရေးသွင်းမှု အမှားဖြင့် လွှဲပြောင်းမှုကို ရပ်တန့်သည်။ ခြွင်းချက် အကာအကွယ်သည် မမ်မိုရီ ခွဲဝေမှု မအောင်မြင်ခြင်းကို C callback နယ်နိမိတ်မှ လွတ်မထွက်စေရန် တားဆီးသည်။ ခေါ်ဆိုသူသည် response ကို ပြည့်စုံသော ဖိုင်အဖြစ် မသတ်မှတ်မီ လွှဲပြောင်းမှု ရလဒ်ကို စစ်ဆေးရန် လိုအပ်သေးသည်။

လွှဲပြောင်းမှု မပြီးဆုံးမချင်း string ကို အသက်ရှင်နေစေပါ။ အချိန်မတူညီသော socket ရေးသွင်းမှုက ၎င်း၏ အကြောင်းအရာကို ဆက်ပို့ပါက ထို ရေးသွင်းမှုလည်း ပြီးဆုံးသည်အထိ ထို byte များကို အသက်ရှင်နေစေပါ။ ကြီးမားသော တုံ့ပြန်ချက်များအတွက် ကိုယ်ထည်တစ်ခုလုံးကို စုဆောင်းခြင်းထက် ကန့်သတ်ထားသော streaming အစီအစဉ်က ပိုသင့်လျော်သည်။

ဆက်စပ်ဆောင်းပါးများ