libcurl Ausgabe in variable anstelle der Textdatei
Nicht bekommen curlpp
für C++ zu arbeiten, habe ich beschlossen, beginnen mit libcurl
mit C statt (für jetzt). Völlig neu für C und C++, das ist immer ein wenig verwirrend. Ich bin mir auch nicht sicher, ob ich es halten kann C-und C++ - Funktionen abgesehen, aber soweit ich weiß, das ist Reine C.
Mit der Hilfe eines Freundes, habe ich es geschafft zu schreiben, der die Ausgabe (den Inhalt einer Seite, die curl abgeholt), um eine Textdatei, aber ich möchte es in einer string-Variablen statt, so kann ich die Leistung in anderen teilen des Codes. Ich konnte nur re-öffnen Sie die Textdatei und den Inhalt gelesen, aber das ist blöd, ich will halt in eine Datei schreiben und nur speichern, um eine string-variable sofort.
Der Funktion write
/* the function to invoke as the data received */
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
Den gesamten code
#include <iostream>
#include "curl/curl.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
/* the function to invoke as the data recieved */
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(int argc, char *argv[]) {
CURL *curl;
FILE *fp;
CURLcode res;
curl = curl_easy_init();
char outfilename[FILENAME_MAX] = "C:\\Users\\admin\\Downloads\\bbb.txt";
if(curl) {
char *response = NULL;
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, "http://www.*hidden*.org/wp-test/lalala.txt");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
War ich auch in der Hoffnung, jemand könnte erarbeiten, wie diese Funktion verwendet wird, genau. Ich bin es gewohnt (aus php und vb.net) zu einer Funktion wie folgt:
function1(ThisIsAvariable,ThisIsAvariableToo)
{
if ThisIsAvariable = something
{
Print "gogopowerrrangers" *append* ThisIsAvariableToo
}
};
Welche dann verwendet werden wie:
function1(PassThisAsVariable1,PassThisAsVariable2);
Aber im obigen code die Funktion
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
Ist einfach so aufgerufen
write_data
Wie man hier sehen kann:
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
Also, was ist all dies für?
(void *ptr, size_t size, size_t nmemb, FILE *stream)
Nicht Rollen automatisch "füllen" die oder ist C/C++ - anders arbeiten mit Funktionen als die meisten anderen Sprachen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie einen string-stream zum speichern der Daten im Speicher. Erstellen Sie die string-stream in
main
und einen Zeiger übergeben, um es zu kräuseln, wie Sie derzeit übergeben Sie einen Zeiger auf eineFILE
.Die nach
write_data
- Funktion würde wie folgt Aussehen:Und über die Funktion aufrufen, es arbeitet grundsätzlich auf die gleiche Weise wie in anderen Sprachen. Sie geben Parameter an die Funktion, wenn Sie aufgerufen werden. Der Unterschied in diesem Fall ist, dass in
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data)
diewrite_data
Funktion nicht aufgerufen.write_data
wird statt gegeben, die als parametercurl_easy_setopt
die informiert curl, das sollte diese Funktion verwenden, wenn es braucht, um Daten zu schreiben.Später dann, wenn curl die Daten empfängt und will schreiben, dass die Daten, es ruft
write_data
mit allen entsprechenden Parametern.#include <sstream>
um die definition vonstd::ostringstream
.