对CURL的一些研究 续

   int main(int argc, char *argv[])
    {
        CURL *curl;

        curl_global_init(CURL_GLOBAL_ALL);
        curl=curl_easy_init();
        curl_easy_setopt(curl, CURLOPT_URL, argv[1]);

        if((fp=fopen(argv[1],"w"))==NULL)
        {
            curl_easy_cleanup(curl);
            exit(1);
        }
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);  //CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
        curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        exit(0);
    }[/code:1:0f6b795165]

    gcc -o 002 -Wall 002.c -lcurl
    ./002 www.chinaunix.net
    这个例子就将html代码保存在了www.chinaunix.net文件中了.


     mq110 回复于:2005-07-31 09:45:42
    此外还可以获得http报文的头部 post表单 等等. 这里就不详细的介绍了. 具体的可以man curl_easy_setopt
    (要用到一个重要的结构体,HttpPost)

 

    下面看一个从ftp站点下载文件的例子.


    [code:1:9d1844307e]#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;
    }[/code:1:9d1844307e]

    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 库 还有好多功能. 有待大家来挖掘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值