Að taka á móti tvíundarsvörum libcurl í C++ std::string
Sendið std::string sem samhengi afturkalls og bætið við skýrum bætatölum þegar tvíundargögn eru móttekin með libcurl.
Proxy getur sótt HTML með góðum árangri og samt skemmt mynd þegar hún er afrituð í C++ biðminni. Áður en þú breytir proxy-samskiptareglunni skaltu skoða móttöku-afturkallið og hlutinn sem er sendur sem samhengi þess.
CURLOPT_WRITEDATA gefur bendi á skrif-afturkallið. Án sérsniðins afturkalls býst sjálfgefni skrifari libcurl við FILE *. Vistfang eins og &response, þar sem response er std::string, hefur aðeins merkingu þegar afturkallið þitt kastar því samhengi aftur í fyrirhugaða gerð.
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;
}Skráið báða helmingana á einfalda handfangið sem notað er fyrir flutninginn:
std::string response;
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, receive);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response);Kallið append notar afhentu bætatöluna. Afturkallsgögn eru ekki núllendað og mynd getur innihaldið núllbæti; að mæla hana með strlen myndi týna hluta af líkamanum. Svar getur líka borist í gegnum mörg afturköll af mismunandi stærðum.
Að skila notuðu bætatölunni samþykkir bútinn. Að skila annarri tölu stöðvar flutninginn með skrifvillu. Undantekningarvörðurinn kemur í veg fyrir að úthlutunarbilun sleppi út fyrir mörk C-afturkallsins; kallaðurinn verður samt að athuga niðurstöðu flutningsins áður en response er meðhöndlað sem heil skrá.
Haldið strengnum lifandi þar til flutningnum lýkur. Ef ósamstillt sokkaskrif senda innihald hans áfram skaltu halda þeim bætum lifandi þar til þau skrif ljúka líka. Fyrir stór svör er takmörkuð streymisuppsetning æskilegri en að safna öllum líkamanum.