2

我用 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 --libstinyCurl.c $ ./a.out http://example.com/ 我用谷歌搜索,但我找不到。我想存储 char[] 而不是标准输出。

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

4

2 回答 2

3

查看curl_easy_setopt()功能。

您可能希望使用注册回调CURLOPT_WRITEFUNCTION- 每当收到数据时都会调用此回调。在回调中,您可以对数据做任何您想做的事情。

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

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

编辑-
这是CURLOPT_WRITEFUNCTIONcurl-library 邮件列表中通过谷歌搜索找到的示例。这个例子是 Daniel Stenberg 的。

于 2009-05-22T09:33:06.527 回答
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;
}

谢谢海克斯康。

于 2009-05-22T13:19:29.547 回答