curl的使用

注意如果是https请求需要带上ssl的库和curl库如下图

上传文件

回调函数

static size_t http_data_writer(void* data, size_t size, size_t nmemb, void* content)
{long totalSize = size*nmemb;return totalSize;
}

formdata格式发送文件分块
lpData键值对;filename文件名称;size数据块大小;strData服务端返回值

bool Post(const char * lpUrl,const char *lpData,const char *filename,int size,string &strData)
{CURL *m_pCurl= curl_easy_init();struct curl_httppost *formpost = 0;struct curl_httppost *lastptr=NULL;curl_easy_setopt(m_pCurl, CURLOPT_CUSTOMREQUEST, "POST");curl_easy_setopt(m_pCurl, CURLOPT_URL, lpUrl);curl_easy_setopt(m_pCurl, CURLOPT_DEFAULT_PROTOCOL, "https");struct curl_slist *headers = NULL;headers = curl_slist_append(headers, "multipart/form-data;charset=UTF-8");curl_easy_setopt(m_pCurl, CURLOPT_HTTPHEADER, headers);//curl_easy_setopt(m_pCurl, CURLOPT_TIMEOUT,10);//等待超时时间curl_easy_setopt(m_pCurl, CURLOPT_SSL_VERIFYPEER, false);curl_easy_setopt(m_pCurl, CURLOPT_SSL_VERIFYHOST, false);//分块大小size 文件指针fpcurl_formadd(&formpost,&lastptr,CURLFORM_COPYNAME, "files",CURLFORM_BUFFER, filename,CURLFORM_BUFFERPTR, lpData,CURLFORM_BUFFERLENGTH, size,CURLFORM_CONTENTTYPE, "multipart/form-data",CURLFORM_END);curl_formadd(&formpost,&lastptr,CURLFORM_CONTENTHEADER,headers,CURLFORM_END);curl_easy_setopt(m_pCurl, CURLOPT_HTTPPOST, formpost);curl_easy_setopt(m_pCurl, CURLOPT_WRITEDATA, (void*)&strData);curl_easy_setopt(m_pCurl, CURLOPT_WRITEFUNCTION, http_data_writer);CURLcode res= curl_easy_perform(m_pCurl);if (res == CURLE_OK) {long scode = 0;curl_easy_getinfo(m_pCurl, CURLINFO_RESPONSE_CODE , &scode);if (scode > 0) res = (CURLcode)scode;}else {//error .fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));res = (CURLcode)-1;}curl_easy_cleanup(m_pCurl);return res;
}

下载文件

文件写入函数

static size_t _callback_download_response(void *contents, size_t size, size_t nmemb, void *userp)
{size_t realsize = size * nmemb;FILE* fp = (FILE *)userp;if (!fp) {/* out of memory! */printf("not file to save download data .\n");return 0;}if(contents && realsize > 0 ) {int isaved = fwrite(contents , 1 , realsize , fp);if(isaved != realsize){printf(" write file with some problems  " );return 0;}}return realsize;
}

下载函数

int CLibcurl::_http_download(string uri, FILE* fp) {CURL *curl = curl_easy_init(); //curl_easy_init();if (curl) {CURLcode res;char str_url[4096] = { 0 };sprintf_s(str_url, "%s", uri.c_str());curl_easy_setopt(curl, CURLOPT_POST, 0);curl_easy_setopt(curl, CURLOPT_URL, str_url);//跳过证书校验curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);//6秒未达到30字节会退出curl_easy_setopt(curl,CURLOPT_LOW_SPEED_TIME,6L);curl_easy_setopt(curl,CURLOPT_LOW_SPEED_LIMIT,30L);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _callback_download_response);curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);res = curl_easy_perform(curl);if (res == CURLE_OK) {long scode = 0;curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE , &scode);if (scode > 0) res = (CURLcode)scode;}else {//error .fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));//res = curl_easy_getinfo(curl, CURLINFO_HTTP_CODE);res = (CURLcode)-1;}if (hlist) curl_slist_free_all(hlist); curl_easy_cleanup(curl);return res;}return -1;
}

curl http或https上传下载相关推荐

  1. cUrl 强大的文件上传/下载工具

    转载: http://blog.csdn.net/apoxlo/article/details/2825823 这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 1)  二话不说,先从 ...

  2. linux curl 命令 http请求、下载文件、ftp上传下载

    1. curl 命令简介 cURL(CommandLine Uniform Resource Locator),是一个利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP.HTTPS. ...

  3. 使用curl 命令上传下载FTP

    CURL命令 1.列出ftp服务器上的目录列表: curl ftp://www.xxx.com/ --user name:passwd curl ftp://www.xxx.com/ –u name: ...

  4. Linux环境Shell脚本上传下载阿里云OSS文件

    为什么80%的码农都做不了架构师?>>>    Linux环境Shell脚本上传下载阿里云OSS文件 背景 工作中由于我们项目生成的日志文件比较重要,而本地磁盘空间有限存储不了多久, ...

  5. 微信公众平台开发 上传下载多媒体文件

    1 微信公众账号在回复图片.语音.视频的时候,将使用media_id来调用相关文件,很多朋友咨询这个如何开发实现.本文将介绍在微信公众平台开发过程中,如何上传下载多媒体文件. 2 3 4 5 一.上传 ...

  6. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import osdef md5_code(usr, pwd):ret = ...

  7. linux快捷上传下载文件

    借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器 其中,对于sz和rz的理解与记忆我用了如下的方法(因为很多时候容易搞混): ...

  8. SecureCRT上传下载文件

    2019独角兽企业重金招聘Python工程师标准>>> SecureCRT是一个仿真终端连接工具.它可以方便的连接SSH服务器,远程管理Linux.同时,它还能使用多种协议方便的上传 ...

  9. .NET技术 ASP.NET中常用的文件上传下载方法(多文件上传)

    文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以 ...

最新文章

  1. 如何设计一个通用的权限管理系统
  2. 网络通信基础知识普及篇
  3. 程序员的福音,AI可以自动修复bug了!
  4. IDA Pro ARM指令集和Thumb指令集的切换
  5. 基于图卷积(GCN)和规则卷积(CNN)的情绪识别
  6. 迷宫问题让你深度理解递归(回溯)
  7. Sangmado 公共基础类库
  8. 如何动态改变Table Control的列抬头
  9. 不写一行代码,搭建Jenkins+Jmeter+Ant接口自动化框架
  10. 力扣——最长公共前缀
  11. mysql 生日提醒
  12. 微信小程序如何加密?
  13. Error:1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL
  14. 2018腾讯游戏客户端岗位暑期实习生面试
  15. c语言 程序竞赛题,C语言程序设计竞赛题目(学生使用).doc
  16. 深入浅出数据分析读书笔记
  17. C++中调用SPLUS对象经典例子
  18. 谁在拿高薪?—IT业薪酬调查
  19. 【Spring Boot官方文档原文理解翻译-持续更新中】
  20. 远程协作与多方会议工具TeamViewer的使用

热门文章

  1. 乐固加固后windows下实现给apk签名
  2. 太强了!美团智能客服核心技术与实践,这差距不止一点点!
  3. 如何从根本上防止服务器被攻击
  4. LUOGU1438无聊的数列
  5. 域名检测工具-免费老域名扫描软件下载
  6. SWIFT电文 MT940客户对账单 报文格式说明
  7. 监听Home键和返回键
  8. 出海季,互联网出海锦囊之本地化
  9. echart图表去掉空白部分
  10. 晨星、银河基金业绩排行榜数据转换工具