2014-11-13 3 views
0

Я пытаюсь использовать Libcurl к данным труб из произвольного (данного пользователя) URL для моего приложения:Трубные данные curl_easy_perform

  • https.c пример показывает, как извлекать содержимое из URL и сразу же записать его где-то, как это происходит, например, stdout или файл.
  • Пример sendrecv.c показывает, как настроить трубку, заставляя приложение повторно называть curl_easy_recv для извлечения фрагментов данных.

Однако я не понимаю, как совместить эти два. Похоже, что curl_easy_recv работает только тогда, когда:

/* Do not do the transfer - only connect to host */ 
curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); 

Когда этот параметр установлен curl_easy_perform не извлекает никаких данных, он просто подключается. В этом примере приложение выполняется вручную, отправив команду http с помощью curl_easy_send. Однако я просто хочу получить данные, указанные в URL-адресе, без написания команд http или ftp вручную.

Есть ли способ использования curl_easy_recv или что-то подобное в сочетании с поведением по умолчанию curl_easy_perform, автоматически заботясь о получении содержимого, указанного в URL-адресе?

ответ

0

Во-первых, curl_easy_send и curl_easy_recv действительно предназначены только для использования, если вы не выполняете один из протоколов, которые libcurl уже поддерживает, поэтому в большинстве случаев они не являются правильным ответом. Звучит не так, как вам нужно.

curl_easy_perform() переносит данный URL-адрес и он вызывается CURLOPT_WRITEFUNCTION, как только данные будут получены, и вы сможете использовать эти данные или отправить их где-нибудь по своему усмотрению. Этого недостаточно?

+0

Спасибо, теперь я понимаю, что для потокового клиента мне нужно использовать мультиинтерфейс вместо 'curl_easy_recv'. – Jeroen

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