Gba àwọn ìdáhùn binary libcurl sínú C++ std::string
Fi std::string ránṣẹ́ gẹ́gẹ́ bí àyíká callback kí o sì fi àwọn ìṣirò byte tí ó ṣe kedere kún nígbà tí o bá ń gba data binary pẹ̀lú libcurl.
Proxy lè gba HTML ní àṣeyọrí kí ó sì tún ba àwòrán jẹ́ nígbà tí ó ń dà á sínú buffer C++. Kí o tó yí ìlànà proxy padà, yẹ callback gbígba àti ohun tí wọ́n fi ránṣẹ́ gẹ́gẹ́ bí àyíká rẹ̀ wò.
CURLOPT_WRITEDATA ń pèsè atọ́ka sí callback kíkọ. Láìsí callback àkànṣe, olùkọ̀wé àkọ́kọ́ libcurl ń retí FILE *. Àdírẹ́sì bí &response, níbi tí response jẹ́ std::string, máa ń ní ìtumọ̀ nìkan nígbà tí callback rẹ bá yí àyíká yẹn padà sí irú tí wọ́n ní lọ́kàn.
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;
}Forúkọ sílẹ̀ àwọn ìlàjì méjèèjì lórí ọwọ́ tí ó rọrùn tí wọ́n ń lò fún gbígbé:
std::string response;
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, receive);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response);Ìpè append ń lo ìṣirò byte tí wọ́n fúnni. Data callback kò ní null ní ìparí, àwòrán sì lè ní byte òdo; wíwọ̀n pẹ̀lú strlen yóò pàdánù apá kan ti ara. Ìdáhùn tún lè wá nípasẹ̀ ọ̀pọ̀ ìpè callback tí ìwọ̀n wọn yàtọ̀.
Pípada ìṣirò byte tí wọ́n lò gba ẹ̀ka náà. Pípada ìṣirò mìíràn dá gbígbé náà dúró pẹ̀lú àṣìṣe kíkọ. Olùṣọ́ àjèjì ń dáàbò bo ìkùnà pínpín kí ó má baà jáde kọjá ààlà callback C; olùpè ṣì gbọ́dọ̀ yẹ àbájáde gbígbé náà wò kí ó tó ka response sí fáìlì pípé.
Jẹ́ kí okùn náà wà láàyè títí gbígbé yóò fi parí. Tí kíkọ socket aláìṣeéṣe bá tẹ̀síwájú láti fi àwọn àkóónú rẹ̀ ránṣẹ́, jẹ́ kí àwọn byte yẹn wà láàyè títí kíkọ yẹn pẹ̀lú yóò fi parí. Fún àwọn ìdáhùn ńlá, ètò ṣíṣàn tí ó ní ààlà sàn ju kíkó gbogbo ara jọ.