2010-12-27 2 views
2

У меня есть следующий вопрос: как я могу записать данные, возвращаемые с помощью http-response в буфере char *? Я нашел несколько подходов:Получение данных после curl_easy_perform

  1. использование CURLOPT_WRITEDATA или CURLOPT_WRITEFUNCTION. но для CURLOPT_WRITEDATA требуется указатель на файл (FILE *). использование CURLOPT_WRITEFUNCTION с функцией обратного вызова представляется мне как quirk ...
  2. использование curl_easy_send и curl_easy_recv. но в этом случае мне нужно будет написать все заголовки с руками ...

Есть ли какой-нибудь другой, более элегантный подход? например передать char * буферный указатель на некоторую функцию, чтобы получить ответ http.

ответ

2

Фактически CURLOPT_WRITEDATA и CURLOPT_WRITEFUNCTION могут использоваться с любым типом указателя. Пока ваша функция совместима с типом указателя.

Например:

... 
    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

так ... я должен сделать это в разных потоках? – milo

+0

Хороший ответ, вот как это должно быть сделано. О, и не забывайте, что ptr может быть всего лишь фрагментом всего ответа, в зависимости от того, какие параметры вы задали с curl_easy_setopt. – BROCK

+0

Кажется немного глупым, что завиток не дает «сколько данных вы указали в буфере, который я дал вам». –

Смежные вопросы