скрыть curl_easy_perform - PullRequest
       5

скрыть curl_easy_perform

10 голосов
/ 12 мая 2010

Как скрыть вывод curl_easy_perform (в оболочке)?
Это относится к приложению C.

Ответы [ 3 ]

22 голосов
/ 09 июля 2012

Используйте CURLOPT_NOBODY в curl_easy_setopt (). Пример:

 ...

CURL *curl;
CURLcode statusCode;

curl = curl_easy_init();
if(curl){
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/");
    //CURLOPT_NOBODY does the trick
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
    curl_easy_perform(curl);

 ...

Ссылка на документы: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOBODY

11 голосов
/ 12 мая 2010

Установите параметры CURLOPT_WRITEFUNCTION и / или CURLOPT_WRITEDATA:

FILE *f = fopen("target.txt", "wb");
curl_easy_setopt(handle, CURLOPT_WRITEDATA, f);

По умолчанию libcurl записывает вывод в stdout. Когда вы переопределяете это (что делает почти любое приложение), оно будет записывать в другой файл или передавать порции вывода в обратный вызов. См. Документацию для CURLOPT_WRITEFUNCTION для получения более подробной информации.

6 голосов
/ 12 мая 2010

Как сказал Джои , CURLOPT_WRITEFUNCTION позволит вам полностью игнорировать весь вывод. Просто установите обратный вызов, который абсолютно ничего не делает, если вы хотите, чтобы данные просто исчезали, без записи в какой-либо дескриптор файла.

Например,

/* Never writes anything, just returns the size presented */
size_t my_dummy_write(char *ptr, size_t size, size_t nmemb, void *userdata)
{
   return size * nmemb;
}

Тогда в ваших вариантах:

curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, &my_dummy_write);

Или наведите дескриптор файла на пустое устройство (намного проще).

...