首页 > 其他分享 >《用 libcurl 实现 HTTP 下载文件,其中设置了超时时间,以便在网络异常时能够快速中止下载。》

《用 libcurl 实现 HTTP 下载文件,其中设置了超时时间,以便在网络异常时能够快速中止下载。》

时间:2023-02-16 15:14:01浏览次数:40  
标签:fp handle file libcurl cleanup easy HTTP curl 下载

  CURLOPT_TIMEOUT选项设置了超时时间为 10 秒,如果在这个时间内没有下载完成,则会返回一个超时错误,可以在回调函数中进行错误处理。如果网络异常或其他错误,也会在curl_easy_perform函数中立即返回错误,而不是一直阻塞等待。

#include <stdio.h>
#include <curl/curl.h>

int download_file(const char *url, const char *file_path) {
    CURL *curl_handle = NULL;
    CURLcode res;

    FILE *fp = NULL;
    int ret = -1;

    curl_global_init(CURL_GLOBAL_DEFAULT);

    curl_handle = curl_easy_init();

    if (curl_handle) {
        fp = fopen(file_path, "wb");
        if (fp == NULL) {
            printf("open file error\n");
            goto cleanup;
        }

        curl_easy_setopt(curl_handle, CURLOPT_URL, url);
        curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, fp);

        // 设置超时时间
        curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 10L);

        res = curl_easy_perform(curl_handle);

        if (res != CURLE_OK) {
            printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
            goto cleanup;
        }

        ret = 0;

    }

cleanup:
    if (fp != NULL) {
        fclose(fp);
    }

    if (curl_handle) {
        curl_easy_cleanup(curl_handle);
    }

    curl_global_cleanup();

    return ret;
}

int main() {
    download_file("http://example.com/test.txt", "test.txt");
    return 0;
}

 

标签:fp,handle,file,libcurl,cleanup,easy,HTTP,curl,下载
From: https://www.cnblogs.com/zhuangquan/p/17126819.html

相关文章

  • a 标签下载文件重命名文件失效
    背景:a标签下载cos桶文件download失效原因:下载的链接跨域,download属性重命名文件失效,浏览器无法获取到文件,无法进行更改。解决办法:downloadFile(url,`文件重命名`);......
  • 苹果Mac电脑软件最佳资源下载站macw
    macw是一个专业的苹果Mac电脑软件最佳资源下载站。海量Mac软件,Mac教程技巧,壁纸,字体,模板,插件视频等资源集一身。有众多业界所推崇的主流软件,还有许多你不曾了解的小众精品......
  • 由于公司里的服务器做了防火墙限制,无法下载软件
    由于公司里的服务器做了防火墙限制,无法下载软件服务端1、我们在自己的虚拟机上进行下载[[email protected]]#head/etc/yum.conf[main]cachedir=/chen#设置保......
  • Win11 私密 DNS-over-HTTPS(DoH) 启用教程
    DoT全称是DNSoverTLS,使用TLS协议来传输DNS协议。TLS协议是目前互联网最常用的安全加密协议之一,我们访问HTTPs的安全基础就是基于TLS协议的。DoH全称是DNS......
  • Blazor 拖放上传文件转换格式并推送到浏览器下载
    前言昨天有个小伙伴发了一个老外java编写的小工具给我,功能是转换西班牙邮局快递Coreeosexpress的单据格式成Amazon格式,他的需求是改一下程序为匹配转换另一个快递公司M......
  • HTTP
    HTTP协议HTTP是Web浏览器和Web服务器之间通信的标准协议HTTP指定客户端与服务器如何建立连接、客户端如何从服务器请求数据,服务器如何响应请求,以及最后如何关闭连接HTT......
  • metamask 所有官方版最新版下载,chrome浏览器插件, 区块链以太坊eth钱包安装使用教程
    在区块链技术日益发展的今天,数字货币的使用也越来越广泛。作为数字货币的一种存储和交易方式,钱包在数字货币领域也扮演着重要的角色。在这其中,MetaMask是一种功能强大的钱......
  • https 和 http 的区别?
    https协议需要CA证书,费用较高;而http协议不需要http协议是超文本传输协议,信息是明文传输的;https是具有安全性的SSL加密传输协议使用不同的连接方式,端口号也不相......
  • 聊一聊HTTPS双向认证的简单应用
    目录背景准备工作ASP.NETCorenginx反向代理IIS部署总结参考资料背景在三方接口对接中,偶尔会遇到需要传递证书的情况,这种方式其实是在SSL握手过程中会同时验证客户端和......
  • 1. http协议
    http协议http协议(超文本传输协议)http协议是基于Tcp/ip协议之上的应用层协议,不关心数据传输的细节,用来规范客户端和服务器端的数据传输格式(客户端和服务器端请求和响......