Ich möchte das Ergebnis dieser Curl-Funktion in einer Variablen speichern. Wie kann ich das tun?
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
danke, ich habe es so gelöst:
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
function_pt(void *ptr, size_t size, size_t nmemb, void *stream){
printf("%d", atoi(ptr));
}
int main(void)
{
CURL *curl;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, function_pt);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
system("pause");
return 0;
}
CURLcode res;
wird nicht verwendetAntworten:
Sie können eine Rückruffunktion festlegen, um eingehende Datenblöcke mit zu empfangen
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, myfunc);
Der Rückruf akzeptiert ein benutzerdefiniertes Argument, das Sie mit festlegen können
curl_easy_setopt(curl, CURLOPT_WRITEDATA, p)
Hier ist ein Codeausschnitt, der einen Puffer
struct string {*ptr; len}
an die Rückruffunktion übergibt und diesen Puffer bei jedem Aufruf mit realloc () vergrößert.quelle
size_t
(außer sichlen
selbst) deklariert würdenconst
.std::string
gehenDie folgende Antwort ist die C ++ - Methode, um dies
std::string
anstelle einer nullterminierten Zeichenfolge zu tun . Es verwendet weiterhin eine Rückruffunktion (daran führt kein Weg vorbei), behandelt aber auch Zuordnungsfehler mit try / catch.quelle
s->append((char*)contents. nmemb);
arbeitet einwandfrei mit mir und ist prägnanter. Außerdem hat die offizielle Funktionssignatur für den Rückruf einchar*
erstes Argument, sodass Sie dieses verwenden und das Casting weglassen können. Und schließlich wirds->resize()
der neu zugewiesene Speicherplatz tatsächlich initialisiert. Da Sie es sowieso überschreiben werden,s->reserve()
wäre es effizienter.Lesen Sie das Handbuch hier: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html Ich denke, Sie benötigen mehrere Aufrufe von CURL_SETOPT. Der erste ist die URL, die Sie verarbeiten möchten, der zweite ist wie folgt:
Wobei function_ptr mit dieser Signatur übereinstimmt:
Was hier passiert, ist, dass Sie eine Rückruffunktion bezeichnen, die libcurl aufruft, wenn eine Ausgabe zum Schreiben von einer von Ihnen aufgerufenen Übertragung vorhanden ist. Sie können es automatisch in eine Datei schreiben lassen oder ihm einen Zeiger auf eine Funktion übergeben, die die Ausgabe selbst verarbeitet. Mit dieser Funktion sollten Sie in der Lage sein, die verschiedenen Ausgabezeichenfolgen zu einem Stück zusammenzusetzen und sie dann in Ihrem Programm zu verwenden.
Ich bin mir nicht sicher, welche anderen Optionen Sie möglicherweise festlegen müssen / was sich sonst noch auf das Verhalten Ihrer App auswirkt. Schauen Sie sich diese Seite also genau an.
quelle
Hier ist eine C ++ - Variante der akzeptierten Antwort von alex-jasmin
quelle