我想用libcurl存储字符串的结果

时间:2009-05-22 09:17:44

标签: c 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/ 我检查搜索它谷歌但我找不到。 我想存储char []而不是stdout。

是初学者的问题 提前感谢你

2 个答案:

答案 0 :(得分:3)

查看curl_easy_setopt()功能。

您希望使用CURLOPT_WRITEFUNCTION注册回调 - 只要收到数据,就会调用此回调。在回调中,您可以使用数据执行任何操作。

注意 - 这对初学者来说有些棘手。您需要了解函数指针是什么。

(这个答案是基于阅读http://curl.haxx.se/libcurl/c/curl_easy_setopt.html中的API - 我从未使用过libcurl。)

编辑 -
以下是curl-library mailing list中通过Google搜索CURLOPT_WRITEFUNCTION找到的示例。这个例子是Daniel Stenberg。

答案 1 :(得分: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;
}

谢谢Hexagon。