Penso che si dovrà scrivere una funzione per passare come un callback scrittura tramite CURLOPT_WRITEFUNCTION
(vedi this). In alternativa è possibile creare un file temporaneo e passare il relativo descrittore di file tramite CURLOPT_WRITEDATA
(l'opzione successiva elencata in quella pagina). Quindi rileggerei i dati dal file temporaneo in una stringa. Non è la soluzione più carina, ma almeno non devi fare confusione con i buffer e i puntatori di funzione.
EDIT: Dal momento che non si vuole scrivere in un file, qualcosa di simile potrebbe funzionare:
#include <string>
size_t write_to_string(void *ptr, size_t size, size_t count, void *stream) {
((string*)stream)->append((char*)ptr, 0, size*count);
return size*count;
}
int main(void) {
// ...
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.browsarity.com/");
string response;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_string);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
// The "response" variable should now contain the contents of the HTTP response
}
return 0;
}
NEGAZIONE: non ho ancora testato questo, e io sono un po ' arrugginito su C++, ma puoi provarlo.
fonte
2010-03-04 04:35:48
Ero già in quel collegamento ma non riuscivo a capire come farlo, con i puntatori e tutto. e la cosa del file non è buona per me, perché ho una piccola quantità di dati e ho bisogno che sia molto veloce .. – shaimagz
Non ti biasimo. Vedi la mia modifica. –
funziona per me. io uso string * come ultimo parametro in write_to_string, questo mi salva un casting. – Synox