2009-05-22 5 views
2

Ich schreibe ein Programm mit libcurl.Ich möchte ein Ergebnis für die Zeichenfolge mit Libcurl

#include <stdio.h> 
#include <string.h> 
#include <curl/curl.h> 

#define URL_MAX 256 

int main(int argc, char *args[]) 
{ 
    CURL *curl; 
    CURLcode res; 
     curl_global_init(CURL_GLOBAL_DEFAULT); 
    curl = curl_easy_init(); 
    curl_easy_setopt(curl, CURLOPT_URL, args[1]); 
    curl_easy_perform(curl); 
    curl_easy_cleanup(curl); 

    return 0; 
} 

$ gcc tinyCurl.c $ gcc curl-config --libs tinyCurl.c $ ./a.out http://example.com/ Ich suche untersuchen Google es, aber ich kann nicht finden. Ich möchte char [] nicht stdout speichern.

ist eine Frage des Anfängers Ihnen im Voraus danken

Antwort

3

Schauen Sie sich die curl_easy_setopt() Funktion.

Sie möchten einen Rückruf mit CURLOPT_WRITEFUNCTION registrieren - dieser Rückruf wird immer dann aufgerufen, wenn Daten empfangen werden. Aus dem Rückruf heraus können Sie mit den Daten machen, was Sie wollen.

Hinweis - das ist etwas schwierig für einen Anfänger. Sie müssen verstehen, was Funktionszeiger sind.

(Diese Antwort basiert auf dem Lesen der API in http://curl.haxx.se/libcurl/c/curl_easy_setopt.html - ich habe noch nie libcurl verwendet).

EDIT-
Hier ist ein Beispiel von googeln für CURLOPT_WRITEFUNCTION im curl-library mailing list gefunden. Dieses Beispiel stammt von Daniel Stenberg.

+0

Vielen Dank aber, Könnten Sie mir mehr Details Code Beispiele geben? – freddiefujiwara

3

Ich verstehe es!

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 

#include <curl/curl.h> 
#include <curl/types.h> 
#include <curl/easy.h> 

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) 
{ 
    char buf[size*nmemb+1]; 
    char * pbuf = &buf[0]; 
    memset(buf, '\0', size*nmemb+1); 
    size_t i = 0; 
    for(; i < nmemb ; i++){ 
    strncpy(pbuf,ptr,size); 
    pbuf += size; 
    ptr += size; 
    } 
    printf("%s",buf); 
    return size * nmemb; 
} 

int main(int argc, char **argv) 
{ 
    CURL *curl_handle; 
    curl_handle = curl_easy_init(); 
    enum{Command,URL,NumCommands}; 
    if(NumCommands != argc){ 
     fprintf(stderr,"Usage : %s <url>\n",argv[0]); 
     return 1; 
    } 
    curl_easy_setopt(curl_handle, CURLOPT_URL, argv[URL]); 
    curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS ,1); 
    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION,&write_data); 
    curl_easy_perform(curl_handle); 
    curl_easy_cleanup(curl_handle); 
    return 0; 
} 

Danke Hexagon.

+0

Dann akzeptieren Sie die Antwort von Hexagon – bortzmeyer

+0

sicher. Ich werde es tun – freddiefujiwara

Verwandte Themen