cURL result to a String

Shooter2k

Erfahrenes Mitglied
Hallo liebes Forum,
ich habe ein kleines Problem. Ich möchte das cURL Result in einen String speichern. Mein bisheriger Code sieht so aus:

Code:
CURL *curl;
CURLcode res;

	curl = curl_easy_init();
	if(curl) {
		curl_easy_setopt(curl, CURLOPT_URL, "http://www.test.de");
		res = curl_easy_perform(curl);
		
		curl_easy_cleanup(curl);
	}

So wie es aussieht wird der Code in die Variable "res" gespeichert. Ich weis allerdings nicht was das für ein Typ ist. Ich brauche unbedingt das Result als String. Kann mir jemand helfen?

Vielen Dank
gruß
 
Hi.
So wie es aussieht wird der Code in die Variable "res" gespeichert. Ich weis allerdings nicht was das für ein Typ ist.
Das brauchst du auch nicht genau wissen. Es ist allerdings irgendein Integer-Typ in dem ein Fehlercode kodiert ist. Siehe http://curl.haxx.se/libcurl/c/libcurl-errors.html
Ich brauche unbedingt das Result als String. Kann mir jemand helfen?
Setze einfach CURLOPT_WRITEFUNCTION und CURLOPT_WRITEDATA. Dann schreibst du eine Callback-Funktion und kannst dort deinen String zusammenbauen. Ungefähr so:
C:
size_t append_string( char *ptr, size_t size, size_t nmemb, void *userdata) {
  if (ptr != NULL) {
    char *buf = (char*)userdata;
    memcpy(buf + strlen(buf), ptr, size);
    buf[strlen(buf) + size] = '\0';
  }
}

...

char buf[5000]; // oder malloc
curl_easy_setopt(curl,  CURLOPT_WRITEFUNCTION, &append_string);
curl_easy_setopt(curl,  CURLOPT_WRITEDATA, &buf);
Gruß

PS: Falls du C++ verwendest kannst du natürlich auch einen Zeiger auf einen std::string übergeben. Das macht die ganze Sache noch einfacher.
 
Zuletzt bearbeitet:
Hi deepthroat,
danke für deine Antwort. Ich verwende C++. Kannst du mir kurz ein Beispiel mit dem "pointer" zeigen? Ich wollte es so einfach wie nur möglich machen.

Vielen Dank
gruß
 
C++:
size_t append_string( char *ptr, size_t size, size_t nmemb, void *userdata) {
  if (ptr != NULL) {
    std::string* str = reinterpret_cast<std::string*>(userdata);
    str->append(ptr, size * nmemb);
  }
  return (size * nmemb);
}

...

std::string str;
curl_easy_setopt(curl,  CURLOPT_WRITEDATA, &str);
Gruß
 
Zurück