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超时时间也要根据下载资源更改为合适的大小。

Linux C语言通过curl下载https资源相关推荐

  1. C++解决Curl下载https地址文件出错的问题(curl_easy_perform 返回60)

    问题描述 使用curl下载https地址文件时,调用 curl_easy_perform 函数返回错误码60,表示CURL_SSL_CACERT错误,大概的意思是没有设置证书.当前使用的 curl版本 ...

  2. Linux用wget和curl下载jdk

    #1. 下载JDK(不同版本JDK更换链接即可) jdk下载链接 wget命令方式下载(不用重定向) 参数解释: –no-check-certificate:表示不校验SSL证书,因为中间的两个302 ...

  3. linux中文语言包rpm下载,centos中文语言包下载-centos中文语言包 fonts-chinese-3.02-12.el5.noarch.rpm下载__飞翔下载...

    centos中文语言包 fonts-chinese-3.02-12.el5.noarch.rpm,直接在目录下运行: rpm -ivh fonts-chinese-3.02-12.el5.noarch ...

  4. Linux C语言 利用url下载文件(实现wget命令)

    1.思路分析,以下载下面的url为例 http://www.cztouch.com/upfiles/soft/testpdf.pdf 从url中获取文件名testpdf.pdf,以该名称创建文件 从u ...

  5. 使用wget命令https资源下载不下来的解决办法

    使用wget命令下载https资源但是下载不下来,这是可以将wget https:xxxxx 修改为 wget http:xxxxx 如果liunx网络不稳定,可能会出现断了的情况,可以开启断点续传的 ...

  6. linux补丁怎么下载工具,Linux内核补丁批量自动下载工具

    Linux kernel官网cgit工具不支持按变更代码进行补丁搜索,想到个办法就是把补丁都抓下来,这样可以在本地搜索.花了2个小时写了个小工具,话不多说,直接看效果: E:\docs\TOOLS\p ...

  7. Linux | (WGET、Curl、Aria2、Axel)的最佳命令行下载加速工具【详解】

    简介: 在远程服务器或者本地工作时,您可能经常需要从外部源获取内容.要获得这样的内容,特别是当您没有其他选项时,您将需要使用Linux命令行工具来完成这项工作. 在本篇文章当中,我们将介绍一些最常用的 ...

  8. Linux篇之命令行下载远程文件curl命令的介绍与使用

    一.curl简介 通常情况下,当我们不想在本机下载文件,上传至服务器时,觉得这样过于麻烦,步骤繁琐. 那么该怎么办呢? 在Linux中,服务器下载文件,提供了一种curl命令,它可以实现在Linux中 ...

  9. linux 命令界面 下载,[转载]命令行也强大之下载迅雷资源的方法

    [转载]命令行也强大之下载迅雷资源的方法 发布时间:2010-02-27 19:27:43来源:红联作者:yaodechang www.diybl.com 时间:2009-05-02 作者:匿名 编辑 ...

最新文章

  1. 怎样禁用计算机里的防病毒程序,Windows Defender防病毒程序已在Windows 10上完全永久禁用...
  2. fuzzy k means
  3. svd奇异值分解_奇异值分解SVD
  4. http 和 https_Golang设置https访问,以及http如何重定向到https
  5. 如何将两部手机内容互换_两部iPhone手机之间如何大量互传照片?
  6. SpringSecurity Filter顺序
  7. Android Studio3.2经常用的一些依赖(以后再加)
  8. webpack 3 零基础入门教程 #16 - 使用 ProvidePlugin 插件来处理像 jQuery 这样的第三方包...
  9. IEEE 你吃透了吗?
  10. 用ggsashimi做可变剪切的可视化
  11. 学习矩阵分析与应用过程中的点滴记录(一)
  12. 常见移动机器人多角度对比分析
  13. 小学生计算机培优辅困记录,信息技术培优辅差工作计划范文
  14. Android 三方数据库ObjectBox使用
  15. python pyplot 宽高等比_matplotlib(等单位长度):长宽比为“等”时,z轴不等于x轴和y轴...
  16. 为什么需要序列化总结
  17. 高通8996启动流程-3. sbl1启动流程
  18. 知乎上关于倒金字塔体的一片文章
  19. echarts 中国地图(带南海诸岛) 及各省份地图json文件
  20. iOS常见的设计模式:工厂设计模式

热门文章

  1. ETCD启动失败-connect: no route to host
  2. 政务数字化转型之探索
  3. 【补充】celery组件
  4. python优点和缺点
  5. 关于队里面最菜的在博客打卡第五十九天这件事
  6. Keil编译出现keilc error C183: unmodifiable lvalue错误
  7. 弘辽科技:淘宝怎么提升销量才有作用?
  8. word里面表格显示不全解决办法,随手记
  9. pytorch中的二分类及多分类交叉熵损失函数
  10. 印象笔记之让我发狂的体验(一)