我用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。
是初学者的问题 提前感谢你
答案 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。