Linux C语言通过curl下载https资源
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资源相关推荐
- C++解决Curl下载https地址文件出错的问题(curl_easy_perform 返回60)
问题描述 使用curl下载https地址文件时,调用 curl_easy_perform 函数返回错误码60,表示CURL_SSL_CACERT错误,大概的意思是没有设置证书.当前使用的 curl版本 ...
- Linux用wget和curl下载jdk
#1. 下载JDK(不同版本JDK更换链接即可) jdk下载链接 wget命令方式下载(不用重定向) 参数解释: –no-check-certificate:表示不校验SSL证书,因为中间的两个302 ...
- 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 ...
- Linux C语言 利用url下载文件(实现wget命令)
1.思路分析,以下载下面的url为例 http://www.cztouch.com/upfiles/soft/testpdf.pdf 从url中获取文件名testpdf.pdf,以该名称创建文件 从u ...
- 使用wget命令https资源下载不下来的解决办法
使用wget命令下载https资源但是下载不下来,这是可以将wget https:xxxxx 修改为 wget http:xxxxx 如果liunx网络不稳定,可能会出现断了的情况,可以开启断点续传的 ...
- linux补丁怎么下载工具,Linux内核补丁批量自动下载工具
Linux kernel官网cgit工具不支持按变更代码进行补丁搜索,想到个办法就是把补丁都抓下来,这样可以在本地搜索.花了2个小时写了个小工具,话不多说,直接看效果: E:\docs\TOOLS\p ...
- Linux | (WGET、Curl、Aria2、Axel)的最佳命令行下载加速工具【详解】
简介: 在远程服务器或者本地工作时,您可能经常需要从外部源获取内容.要获得这样的内容,特别是当您没有其他选项时,您将需要使用Linux命令行工具来完成这项工作. 在本篇文章当中,我们将介绍一些最常用的 ...
- Linux篇之命令行下载远程文件curl命令的介绍与使用
一.curl简介 通常情况下,当我们不想在本机下载文件,上传至服务器时,觉得这样过于麻烦,步骤繁琐. 那么该怎么办呢? 在Linux中,服务器下载文件,提供了一种curl命令,它可以实现在Linux中 ...
- linux 命令界面 下载,[转载]命令行也强大之下载迅雷资源的方法
[转载]命令行也强大之下载迅雷资源的方法 发布时间:2010-02-27 19:27:43来源:红联作者:yaodechang www.diybl.com 时间:2009-05-02 作者:匿名 编辑 ...
最新文章
- 怎样禁用计算机里的防病毒程序,Windows Defender防病毒程序已在Windows 10上完全永久禁用...
- fuzzy k means
- svd奇异值分解_奇异值分解SVD
- http 和 https_Golang设置https访问,以及http如何重定向到https
- 如何将两部手机内容互换_两部iPhone手机之间如何大量互传照片?
- SpringSecurity Filter顺序
- Android Studio3.2经常用的一些依赖(以后再加)
- webpack 3 零基础入门教程 #16 - 使用 ProvidePlugin 插件来处理像 jQuery 这样的第三方包...
- IEEE 你吃透了吗?
- 用ggsashimi做可变剪切的可视化
- 学习矩阵分析与应用过程中的点滴记录(一)
- 常见移动机器人多角度对比分析
- 小学生计算机培优辅困记录,信息技术培优辅差工作计划范文
- Android 三方数据库ObjectBox使用
- python pyplot 宽高等比_matplotlib(等单位长度):长宽比为“等”时,z轴不等于x轴和y轴...
- 为什么需要序列化总结
- 高通8996启动流程-3. sbl1启动流程
- 知乎上关于倒金字塔体的一片文章
- echarts 中国地图(带南海诸岛) 及各省份地图json文件
- iOS常见的设计模式:工厂设计模式