Ich habe Hausaufgaben, wo ich irgendwie zwei HTTP-Antworten vergleichen muss. Ich schreibe es auf C und benutze libcurl, um die Dinge einfacher zu machen. Ich rufe die Funktion auf, die libcurl verwendet, um eine HTTP-Anfrage und eine Antwort von einer anderen Funktion auszuführen, und ich möchte die HTTP-Antwort als char *
zurückgeben. Hier ist mein Code so weit (es stürzt ab):In C, wie benutzt man libcurl, um eine HTTP-Antwort in eine Zeichenkette zu lesen?
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
char *handle_url(void) {
CURL *curl;
char *fp;
CURLcode res;
char *url = "http://www.yahoo.com";
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
//printf("\n%s", fp);
}
return fp;
}
Diese Lösung C libcurl get output into a string funktioniert, aber nicht in meinem Fall, weil ich nur die Zeichenfolge an die aufrufende Funktion zurückkehren wollen.
Irgendwelche Ideen?
Was ist 'char * fp;'? Warum gibst du es zurück? Wie/wo ordnen Sie Speicher zu? Wo ist meine Brille? –
lol. Ich hatte Jahre, um C zu schreiben, also bin ich wieder auf Null. Die Sache ist, dass es im Beispiel "C libcurl get output in eine Zeichenfolge" funktioniert, ich verweise oben. Ich kenne die genaue Dateneingabe nicht, daher bin ich mir nicht sicher, ob die Zuweisung von Speicher für char * fp funktioniert. –
Ihre 'write_data' sollte als Parameter' char * fp' übergeben werden, aber Sie haben definiert, dass sie eine 'FILE' braucht. Außerdem müssen Sie wahrscheinlich den Fall behandeln, in dem Ihr 'write_func' mehr als einmal aufgerufen wird. Wenn Sie möchten, dass dies wie erwartet funktioniert, muss 'char * fp' in' write_func() 'als Zeiger auf einen Zeiger übergeben werden, damit Sie es richtig zuordnen können. Mit anderen Worten, Ihr 'write_func()' sollte ein 'char **', nicht ein 'FILE *' nehmen. – mpontillo