linux 下 libcurl 终极详解

C语言 访问 URL 的实现。

Linux libcurl安装及注意事项:Linux libcurl安装及注意事项 - 蘭亭客 - 博客园

(安装 libcurl 源码库 )

libcurl 使用说明和网页抓取 linux下的curl编程:libcurl 使用说明和网页抓取 linux下的curl编程_ultrapp的专栏-CSDN博客

curl 库 使用实例 

1. 下载最新源码 编译成 libcurl.so 

2.  包含所有头文件 

3. 使用实例  有点东西 有内涵

    static size_t write_data(char *buf, size_t size, size_t nmemb, void *userdata)
    {
        static size_t file_total_size = 0;
        size_t file_total = 0;
        CurlInfo* curl_info = (CurlInfo *)userdata;
        if (curl_info->language_id == CN) {
            file_total = CN_SIZE;
        } else if (curl_info->language_id == EN) {
            file_total = EN_SIZE;
        }
        size_t realSize = size * nmemb;
        size_t file_return_size = write(curl_info->fd, buf, realSize);
        if (file_return_size <= 0 ) {
            return -1;
        }
        file_total_size += file_return_size;
        // pr_dbg("file_total_size:: %ld\n", file_total_size);
        VoiceDataStatus_t voice_data_status;
        voice_data_status.language_id = curl_info->language_id;
        voice_data_status.schedu = 0x64 * file_total_size / file_total;  
        voice_data_status.status = 0x1; 
        if (voice_data_status.schedu % 10 == 0) {
            curl_info->cloud_server->SendTaskVoiceDataStatus(&voice_data_status);
        }
        return file_return_size;
    }

    void BrainHub::GetHttpRequest(const char* file_name, const char* url,  CurlInfo* curl_info)
    {
        if (file_name == NULL || url == NULL) {
            pr_err("file_name or url is null.\n");
            return;
        }
        int fd = open(file_name,  O_RDWR|O_CREAT,  0644);
        if (fd == -1) {
            pr_err("file fd is null.\n");
            return;
        }
        curl_info->fd = fd;
        CURLcode ret = curl_global_init(CURL_GLOBAL_ALL);
        if (CURLE_OK != ret) {
            pr_err("curl_global_init failed.\n");
            return;
        }
        CURL *handle = curl_easy_init();
        if (handle == NULL) {
            pr_err("curl_easy_init failed.\n");
            return;
        }
        curl_easy_setopt(handle, CURLOPT_URL, url);
        curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(handle, CURLOPT_WRITEDATA, (void *)curl_info);
        curl_easy_perform(handle);
        curl_global_cleanup();
        close(fd);
    }

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

梦幽风

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值