2009-05-22 8 views
2

私はlibcurlでプログラムを書いています。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/ 私はそれがGoogle検索が、私は見つけることができません調べます。 stdoutではなくchar []を保存したいと思います。

curl_easy_setopt()機能を確認し、事前

答えて

3

であなたに感謝初心者 の質問です。

CURLOPT_WRITEFUNCTIONを使用してコールバックを登録すると、データを受信するたびにこのコールバックが呼び出されます。コールバックの中から、データで必要なことを何でもすることができます。

注 - これは初心者にとってややこしいことです。関数ポインタが何であるかを理解する必要があります。

(この回答は、http://curl.haxx.se/libcurl/c/curl_easy_setopt.htmlでAPIを読むことに基づいています。私はlibcurlを使ったことがありません)。

EDIT - ここ
curl-library mailing listに、CURLOPT_WRITEFUNCTIONためグーグルによって見出さ例です。この例はDaniel Stenbergによるものです。

+0

ありがとうございますが、もっと詳細なコード例を教えてください。 – freddiefujiwara

3

私はそれを手に入れました。

#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; 
} 

ありがとうヘキサゴン。

+0

次に、ヘキサゴンの回答 – bortzmeyer

+0

を受け入れてください。 – freddiefujiwara

関連する問題