Linux C语言通过curl下载https资源

article/2025/1/9 2:07:24

Linux C语言通过curl下载https资源代码如下,注意需要把main函数 char *url 赋值为需要下载文件的路径。

#include <curl/curl.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>static size_t filesize = 0;size_t write_data(void *buffer, size_t size, size_t nmemb, void *user_para)
{size_t wb;wb = fwrite(buffer, size, nmemb, (FILE *)user_para);filesize += size * nmemb;printf("fsize=%d\r\n", filesize);return wb;//size * nmemb;
}CURLcode down_file(CURL *curl, char *url, void *para)
{curl_easy_setopt(curl, CURLOPT_URL, url);// 设置远程主机的url地址//curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);//curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);// 设置连接超时时间,单位scurl_easy_setopt(curl, CURLOPT_TIMEOUT, 120);// 设置下载超时时间,单位scurl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);// 设置回调函数来保存接收数据curl_easy_setopt(curl, CURLOPT_WRITEDATA, para);// 设置回调函数参数//curl_easy_setopt(curl,CURLOPT_POST,1);curl_easy_setopt(curl,CURLOPT_VERBOSE,1);// 打开详细信息return curl_easy_perform(curl);// 请求数据
}int main(int argc, char *argv[])
{FILE *fptr;CURL *curl;CURLcode result;char *filename = "./player.mp4";char *url;// 赋值为需要下载文件的路径printf("curl version: %s\r\n", curl_version());// 打印curl版本信息if ((fptr = fopen(filename, "w")) == NULL)// 打开文件{printf("fopen file \"%s\" error!\r\n", filename);return -1;}filesize = 0;curl = curl_easy_init();// 初始化curlresult = down_file(curl, url, fptr);// 下载文件if (result != CURLE_OK){switch (result){case CURLE_UNSUPPORTED_PROTOCOL:printf("unsupported protocol!\r\n");break;case CURLE_COULDNT_CONNECT:printf("couldnt connect!\r\n");break;case CURLE_HTTP_RETURNED_ERROR:printf("http returned error!\r\n");break;case CURLE_READ_ERROR:printf("read error!\r\n");break;default:printf("get error! %s\r\n", result);break;}}printf("result: %d\r\n", result);curl_easy_cleanup(curl);// 释放curl资源fclose(fptr);// 关闭文件return 0;
}

在笔者测试过程中一开始是没有设置 curl_easy_setopt(curl,CURLOPT_VERBOSE,1) 打开详细信息的,下载超时时间设置的也比较短 curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10),只有10秒。然后运行程序后出现了以下错误:在这里插入图片描述
刚开始以为是运行程序后内存异常或者多线程操作导致程序挂掉,就开始gdb调试代码了,后面发现用./curl 命令测试下载是没有问题的,应该不是curl的问题。然后查找资料后,打开CURLOPT_VERBOSE输出详细信息,发现是在下载过程中超时导致关闭连接,程序直接关闭掉了。
在这里插入图片描述
所以在调试过程中打开CURLOPT_VERBOSE输出信息,可以方便我们发现问题,同时CURLOPT_TIMEOUT超时时间也要根据下载资源更改为合适的大小。


http://chatgpt.dhexx.cn/article/4cmCTFkl.shtml

相关文章

CURL下载文件简易进度条

背景 curl下载文件比较方便&#xff0c;sample里的进度打印比较鸡肋&#xff0c;网上搜了一下C打印进度条&#xff0c;随便改改&#xff0c;就ok了&#xff0c;代码贴起来&#xff01; curl 回调函数进度打印输出 int download_progress(char *progress_data,double t, /* d…

如何在GitHub正确地使用 Curl 下载文件?

Curl是在 Linux 终端中下载文件的绝佳工具。 下载与原始文件同名的文件的常用语法非常简单&#xff1a; curl -O URL_of_the_file这在大多数情况下都有效&#xff0c;但是&#xff0c;您会注意到&#xff0c;有时当您从 GitHub 或 SourceForge 下载文件时&#xff0c;它不会获…

Curl 下载安装和配置

Curl 下载安装和配置 1.1 什么是Curl?1.2 Curl 支持的网络协议1.3 Curl 是做什么用的&#xff1f;1.4 Curl 如何下载安装&#xff1f;1.4.1 Windows 平台1.4.2 Linux 平台1.4.3 Mac OS 平台 1.5 Curl 配置1.5.1 解压1.5.2 配置环境变量1.5.3 验证安装配置是否成功 1.6 如何使用…

curl下载和上传

cURL 概述 cURL 是一个利用 URL 语法在命令行下工作的文件传输工具&#xff0c;1997年首次发行。它支持文件上传和下载&#xff0c;所以是综合传输工具&#xff0c;但按传统&#xff0c;习惯称 cURL 为下载工具。 常见用法 下载文件 下载文件 -o&#xff0c;自定义路径和文…

curl下载(curl下载文件)

php写curl下载文件 不是下载到服务器 让浏览器弹出下载文件&#xff0c;在本地下载 求高手解答 这样的用header吧 $file‘下载地址’; if (file_exists($file)) { header(Content-Description: File Transfer); header(Content-Type: application/octet-stream); header(Conten…

Curl下载及简单使用

Curl 是一个命令行工具和库&#xff0c;用于通过URL传输数据。 简单来说就是可以通过命令行发送GET,POST 等多种协议请求的工具 一、官网下载 下载地址 windows版 下载完成后解压即可 二、使用 进入 bin 目录下&#xff0c;打开cmd 窗口&#xff0c;输入 curl 加路径 带cook…

curl 下载图片

curl -o 1.jpg http://image.baidu.com/image123.jpg [1] 40848 [root~]# % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 251k 0 251k 0 0 1570k 0 --:–:-- --:–:-- --:–:-- 1589k

Curl【实例 01】curl下载使用及cmd实例脚本分享(通过请求下载文件)

Curl 官方下载地址 可下载不同平台不同版本的安装包&#xff0c;本次使用的是Windows解压版本curl-8.0.1_9-win32-mingw.zip。 curl下载使用及cmd实例 1.是什么1.1 curl1.2 bat和cmd 2.常用命令2.1 发送GET请求并显示响应头信息2.2 显示详细的请求和响应信息2.3 限制重定向次数…

完整的python项目实例-python完整项目

广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。 一个完整的python项目需要具备什么? 1. 需求功能的实现: 实现思路+现有框架+基础编程 2. 项目日志: logging模块(调试性的日志和记录性的日志…

微信小程序项目实例——投骰子

微信小程序项目实例——投骰子 文章目录 微信小程序项目实例——投骰子一、项目展示二、核心代码文末 项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 投骰子是一款工具类小程序 用户可以点击按钮投出自身的骰子点数 二、核心代码 <!--dice.wxml--> <v…

连接数据库的项目实例

学生成绩管理系统 关键词&#xff1a;java&#xff0c;SQL Server 2012 后端 打开SQL Server 2012&#xff1a; 点击加号&#xff1a; 选中数据库&#xff0c;右键&#xff0c;新建数据库&#xff1a; 点击确定&#xff0c;等待片刻选中数据库&#xff0c;右键&#xff0c;刷…

SSM项目实例——简易版图书管理系统

文章目录 概述准备实现1.搭建数据库2.实现pojo层3.实现dao层4.实现service层5.配置Spring整合dao层6.配置Spring整合service层7.配置Spring整合Spring MVC8.配置Spring整合文件9.实现controller层10.实现view层11.运行前检查 运行后记 概述 通过对数据库中一张表的CRUD&#x…

vue-element-admin完整项目实例

项目运行地址&#xff1a;https://panjiachen.github.io/vue-element-admin/#/login 项目地址&#xff1a;https://github.com/PanJiaChen/vue-element-admin 项目地址&#xff1a;&#xff08;国际化&#xff09;https://github.com/PanJiaChen/vue-element-admin/tree/i18n 项…

购物车——js小项目实例

购物车——js小项目实例 首先构思好整体样式 添加点击事件&#x1f341;事件委托&#x1f341;接下来就是各种函数的书写 最后附上完整js代码 短短几周&#xff0c;js阶段的学习已然结束&#xff0c;结课作业就是实现一个购物车功能 功能&#xff1a; 1、可以添加商品 2、全选…

SpringBoot+Vue项目实例开发及部署

目录 一、SpringBoot快速上手 1、SpringBoot介绍 2、SpringBoot特点 3、快速创建SpringBoot应用 4、SpringBoot开发热部署 二、Web开发基础 1、Web入门 2、控制器 3、路由映射 4、参数传递 三、Web开发进阶 1、静态资源访问 2、文件上传原理 3、拦截器 四、构建…

微信小程序项目实例——手势解锁

微信小程序项目实例——手势解锁 文章目录 微信小程序项目实例——手势解锁一、项目展示二、设置手势、手势解锁三、手势重置文末&#xff1a;项目代码 项目代码见文字底部 一、项目展示 这是一款简单实用的手势解锁工具 手势解锁是当下常用的解锁方式 本实例以工具的形式 可以…

微信小程序项目实例——家居团购

微信小程序项目实例——家居团购 文章目录 微信小程序项目实例——家居团购一、项目展示二、首页三、购物车四、个人中心 项目代码见文字底部 一、项目展示 二、首页 首页由建材市场、团购活动、公益验房和线上拼团组成 从上到下分为广告区、导航区、内容区 核心代码如下&…

微信小程序项目实例——飞机大战

微信小程序项目实例——飞机大战 文章目录 微信小程序项目实例——飞机大战一、项目展示二、设计介绍三、总结 项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 二、设计介绍 游戏和传统的飞机大战模式一样 这里设置了三种敌机和自家飞机的受损图 同时游戏设计了道…

微信小程序项目实例——双人五子棋

微信小程序项目实例——双人五子棋 文章目录 微信小程序项目实例——双人五子棋一、项目展示二、项目核心代码三、效果展示文末 项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 微信小程序项目实例——双人五子棋 双人五子棋是一款游戏小程序 两位选手可以在15x1…

Android开发之项目实例(登录,注册)

Android开发 实现登录注册界面 前言&#xff1a; 今天项目刚刚做完&#xff0c;我就迫不急待的想分享一下&#xff0c;自己通过实例项目踩过的坑以及遇到遇到的困难发表一下&#xff0c;以便刚刚接触的伙伴跳跳坑&#xff0c;也便于自己在今后的开发中巩固&#xff0c;此篇文…