2010-12-27 20 views
2

Ich habe die folgende Frage: Wie kann ich Daten mit HTTP-Antwort in char * Puffer zurückschreiben schreiben? Ich habe mehrere Ansätze gefunden:Empfangen von Daten nach curl_easy_perform

  1. Verwendung CURLOPT_WRITEDATA oder CURLOPT_WRITEFUNCTION. aber CURLOPT_WRITEDATA erfordert Dateizeiger (FILE *). Verwendung von CURLOPT_WRITEFUNCTION mit Callback-Funktion scheint mir als eigenartig ...
  2. Verwendung curl_easy_send und curl_easy_recv. aber in diesem Fall muss ich alle POST Header mit den Händen schreiben ...

Gibt es einen anderen, eleganteren Ansatz? z.B. übergeben Sie char * Pufferzeiger in eine Funktion, HTTP-Antwort in.

Antwort

2

Eigentlich CURLOPT_WRITEDATA und CURLOPT_WRITEFUNCTION kann mit jedem beliebigen Zeigertyp verwendet werden. Solange Ihre Funktion mit diesem Zeigertyp kompatibel ist.

Zum Beispiel:

... 
    client_t *client; 
    CURL *conn; 
    ... 
    curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, read_data); 
    curl_easy_setopt(conn, CURLOPT_WRITEDATA, client); 
    ... 

static size_t read_data(void *ptr, 
         size_t size, 
         size_t nmemb, 
         client_t *client) 
{ 
    memcpy(client->data, ptr, size * nmemb); 
    return size * nmemb; 
} 
+0

so ... Ich habe es in verschiedenen Threads zu tun? – milo

+0

Gute Antwort, so soll es gemacht werden. Oh, und vergiss nicht, dass ptr nur ein Teil der gesamten Antwort ist, abhängig davon, welche Optionen du mit curl_easy_setopt eingestellt hast. – BROCK

+0

Es scheint etwas albern, dass curl nicht bietet "wie viel Daten hast du in den Puffer, den ich dir gab" Anruf. –

Verwandte Themen