2010-05-11 6 views
9

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

+0

, что вы имеете в виду скрыть? – hhafez

+0

Curl_easy_perform печатает содержимое страницы, возвращенное в ответ на запрос (почтовый запрос в моем случае). Я хочу «скрыть» содержимое этой страницы (без просмотра) и напечатать мое личное сообщение – stdio

ответ

10

Установите CURLOPT_WRITEFUNCTION и/или CURLOPT_WRITEDATA опции:

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

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

+0

Спасибо, но я это знаю. Нет пути без «отклонения» вывода (способ его удаления)? – stdio

+1

@stdio - Если вы просто хотите, чтобы вход уходил, откройте устройство NULL и распечатайте все. –

+2

@Tm Сообщение: вы имеете в виду/dev/null? если вы имеете в виду это, код не будет мультиплатформенным. – stdio

6

Как Joey said, 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); 

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

20

Использовать 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

+0

Я хотел войти на страницу https: // user: [email protected]/login/, а затем использовать curl для POST на https://www.example.com/upload/, но с CURLOPT_NOBODY Я теряю сессию -Я бы. Я решил это, написав nul –

+0

. Правильно ли я полагаю, что это полезно для запросов POST, но, вероятно, не так для GET? – xtofl

+0

для POST-запросов, это просто не посылает тело, то есть это не то, что вы ожидаете. – xtofl

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