2016-07-29 14 views
0

Wir müssen Antwort-String von curl in CPP erhalten, habe ich folgende Optionen versucht, aber nichts gearbeitet.js verwendet xhr.responseText für diese.Ich muss in cpp tun.Abrufen von Antworttext von curl in cpp

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) 
{ 
    size_t realsize = size * nmemb; 
    const char* sp = static_cast<const char*>(contents); 
    readBuffer.append(sp, realsize); 
    return realsize; 
} 

CURLcode res; 
char* http_error= new char[100]; 

readBuffer.clear(); 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); 
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); 
CURLcode code(CURLE_FAILED_INIT); 
code = curl_easy_perform(curl); 
cout << "Curl response msg CURLOPT_WRITEDATA: "<<curl_easy_strerror(code)<< " respose :"<<readBuffer; 


res=curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code) ; 
cout << "Curl response msg: "<< curl_easy_strerror(res); 
+0

Vielleicht sollten Sie High-Level-Bibliothek verwenden https://github.com/whoshuu/cpr –

+0

es keine direkte Methode ist dafür wie den HTTP-Statuscode abrufen? – user2769274

Antwort

1

Ihre WriteCallback Funktion Um dies zu ändern:

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) { 
    userp->append((char*) contents, size * nmemb); 
    return size * nmemb; 
} 

Denken Sie daran, Sie sind in &readBuffer als CURL_WRITEDATA Option vorbei. Dies zeigt sich als der vierte Parameter in der WriteCallback. Da der Typ &readBufferstd::string* ist, können Sie das als Signatur in Ihrem Callback verwenden.

Zusätzlich kann, da es sich um ein std::string* ist und kein std::string, haben Sie append durch den Zeiger zuzugreifen, damit die -> statt .. Nach curl_easy_perform sollte readBuffer die Antwort von der Curl-Anforderung enthalten.

den Antwortcode zu erhalten, können Sie das packen die Anfrage nach der Herstellung:

long http_code; 
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); 
+0

Hi..danks für die Antwort..inside userp-> append ((char *) ptr, Größe * nmeb); ptr ist sp (Inhalt)? – user2769274

+0

Ups, vertippte es. Ich werde es korrigieren. Du hast Recht, es sollte Inhalt sein. – huu