2010-05-11 12 views
9

Come nascondere l'output di curl_easy_perform (in una shell)?
Si tratta di un'applicazione C.nascondi curl_easy_perform

+0

che cosa si intende nascondere? – hhafez

+0

Curl_easy_perform stampa il contenuto della pagina restituito in risposta a una richiesta (richiesta post nel mio caso). Voglio "nascondere" quel contenuto della pagina (senza vista) e stampare il mio messaggio personale – stdio

risposta

10

Impostare i CURLOPT_WRITEFUNCTION e/o CURLOPT_WRITEDATA opzioni:

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

Per impostazione predefinita, libcurl scrive uscita stdout. Quando si esegue l'override di questo (che è ciò che quasi qualsiasi applicazione farà), scriverà su un altro file o per passare blocchi di output a un callback. Consultare la documentazione per CURLOPT_WRITEFUNCTION per ulteriori dettagli.

+0

Grazie, ma so questo. Non c'è un modo senza "deviare" l'output (un modo per eliminarlo)? – stdio

+1

@stdio - Se vuoi solo che l'input vada via, apri un dispositivo NULL e stampa tutto lì. –

+2

@ Post: intendi/dev/null? se intendi questo, il codice non sarebbe multipiattaforma. – stdio

6

Come Joey said, CURLOPT_WRITEFUNCTION consentirà di ignorare completamente l'output. Basta impostare un callback che non faccia assolutamente nulla se vuoi che i dati vadano via, senza essere scritti su alcun descrittore di file.

Per esempio,

/* 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; 
} 

Poi nelle opzioni:

curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, &my_dummy_write); 

Oppure, punto l'handle di file su un dispositivo NULL (molto più facile).

20

Utilizzare CURLOPT_NOBODY in curl_easy_setopt(). Esempio:

... 

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); 

... 

Link docs: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOBODY

+0

Volevo accedere a una pagina https: // user: [email protected]/login/ e quindi utilizzare curl su POST a https://www.example.com/upload/ ma con CURLOPT_NOBODY perdo la sessione -id. Ho risolto questo problema scrivendo al nul. –

+0

Ho ragione di supporre che questo sia utile per le richieste POST, ma probabilmente non lo è per GET? – xtofl

+0

per le richieste POST, questo semplicemente non invia il corpo, il che significa che non è quello che ti aspetteresti. – xtofl