- 论坛徽章:
- 1
|
对CURL的一些研究
此外还可以获得http报文的头部 post表单 等等. 这里就不详细的介绍了. 具体的可以man curl_easy_setopt
(要用到一个重要的结构体,HttpPost)
下面看一个从ftp站点下载文件的例子.
- #include <stdio.h>;
- #include <curl/curl.h>;
- #include <curl/types.h>;
- #include <curl/easy.h>;
- struct FtpFile //定义一个结构为了传递给my_fwrite函数.可用curl_easy_setopt的CURLOPT_WRITEDATA选项传递
- {
- char *filename;
- FILE *stream;
- };
- int my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
- {
- struct FtpFile *out=(struct FtpFile *)stream; // stream指针其实就是 指向struct FtpFile ftpfile的
- if(out && !out->;stream)
- {
- out->;stream=fopen(out->;filename, "wb"); //没有这个流的话就创建一个 名字是out->;filename.
- if(!out->;stream)
- return -1;
- }
- return fwrite(buffer, size, nmemb, out->;stream);
- }
- int main(int argc, char *argv[])
- {
- CURL *curl;
- CURLcode res;
- struct FtpFile ftpfile={argv[2],NULL}; //初始化一个FtpFile结构
- curl_global_init(CURL_GLOBAL_DEFAULT);
- curl = curl_easy_init();
- if(curl)
- {
- curl_easy_setopt(curl, CURLOPT_URL,argv[1]);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); //给相关函数的第四个参数 传递一个结构体的指针
- curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE); //CURLOPT_VERBOSE 这个选项很常用 用来在屏幕上显示对服务器相关操作返回的信息
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- if(CURLE_OK != res)
- fprintf(stderr, "curl told us %d\n", res);
- }
- if(ftpfile.stream)
- fclose(ftpfile.stream);
- curl_global_cleanup();
- return 0;
- }
复制代码
gcc -o 003 -Wall 003.c -lcurl
./003 ftp://202.96.64.144/fei.gif fei.gif
我有个匿名的ftp的网址 将目录下的fei.gif 保存到本地 也叫fei.gif
此外还有curl_escape curl_unescape函数用来转换 汉字成 %XX 这种类型.以及转换回来.如果要下载带有汉字的文件.先要调用将字符串转换一下.
curl 库 还有好多功能. 有待大家来挖掘. |
|