14 votes

Cacher curl_easy_perform

Comment puis-je masquer la sortie de curl_easy_perform (dans un shell)?
Ceci concerne une application en C.

25voto

Paul Semionov Points 138

Utilisez CURLOPT_NOBODY dans curl_easy_setopt(). Exemple:

 ...

CURL *curl;
CURLcode statusCode;

curl = curl_easy_init();
if(curl){
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/");
    //CURLOPT_NOBODY fait l'affaire
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
    curl_easy_perform(curl);

 ...

Lien vers la documentation: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOBODY

15voto

Joey Adams Points 13049

Définissez les options CURLOPT_WRITEFUNCTION et/ou CURLOPT_WRITEDATA :

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

Par défaut, libcurl écrit la sortie sur stdout. Lorsque vous remplacez cela (ce que presque toutes les applications feront), il écrira dans un autre fichier ou transmettra des morceaux de sortie à une fonction de rappel. Consultez la documentation pour CURLOPT_WRITEFUNCTION pour plus de détails.

7voto

Tim Post Points 21270

Comme Joey l'a dit, CURLOPT_WRITEFUNCTION vous permettra d'ignorer complètement toute sortie. Il suffit de configurer un rappel qui ne fait absolument rien si vous voulez que les données disparaissent simplement, sans être écrites sur aucun descripteur de fichier.

Par exemple,

/* Ne fait jamais rien, juste retourne la taille présentée */
size_t my_dummy_write(char *ptr, size_t size, size_t nmemb, void *userdata)
{
   return size * nmemb;
}

Ensuite, dans vos options :

curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, &my_dummy_write);

Ou, pointez le descripteur de fichier vers un périphérique NULL (beaucoup plus facile).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X