libcurl参数很多,一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>

这里主要汇总一下,libcurl上传的二种方式:

1、直接上传文件,类似form表单<input type=”file” />,<form enctype=”multipart/form-data”…;

2、上传二进制流;

至于设定自定义头,都是使用一样的方法

struct curl_slist *headers=NULL;
headers = curl_slist_append(headers, "Content-Type: text/xml");
headers = curl_slist_append(headers, "Accept: text/html, */*;q=0.01");
//... //set headers
curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers); //last free the header list
curl_slist_free_all(headers); /* free the header list */

前往官网查看CURLOPT_HTTPHEADER>>

直接上传文件:

struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL; curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "uploadfile",
CURLFORM_FILE, "/",//imagepath
CURLFORM_CONTENTTYPE, "Image/jpeg",
CURLFORM_END); curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "filename",
CURLFORM_COPYCONTENTS, "test.jpg",
CURLFORM_END); curl_easy_setopt(m_curl,CURLOPT_HTTPPOST,formpost); //last free post
curl_formfree(formpost);

如果上传其它文件类型,那就在curl_formadd中附加CURLFORM_CONTENTTYPE参数( Content-Type/Mime-Type )

二进制流上传:

//referer http://curl.haxx.se/mail/lib-2003-08/0190.html
curl_formadd(&post, &last,
CURLFORM_COPYNAME, "file",
CURLFORM_BUFFER, "unnamed.png",
CURLFORM_BUFFERPTR, memblock,
CURLFORM_BUFFERLENGTH, memblock_length,
CURLFORM_CONTENTTYPE, "image/png",
CURLFORM_END); ‘file' is the name of this part, 'unnamed.png' is the name set in the file name field.

上面的参数均不可缺省,如果缺省结果可能不太符合预期。其中Content-Type默认为“application/octet-stream”

CURLFORM_COPYNAME为上传的字段名,如上图所示(name之后)

CURLFORM_BUFFER  在没有使用CURLFORM_FILE上传自定义文件时使用,它用来告诉libcurl文件内容已经在缓存中了,在内容的头信息中它提供了filename字段。我之前没加这个参数发现一直上传不成功- -

*** 还有一个地方要注意的是:CURLFORM_BUFFERLENGTH它的类型必须为long

为了方便测试,我使用了node.js的 formidable 来调试

参考链接:

http://curl.haxx.se/libcurl/c/curl_formadd.html

http://curl.haxx.se/libcurl/c/libcurl-tutorial.html

http://curl.haxx.se/libcurl/c/postit2.html

http://stackoverflow.com/questions/14685196/c-libcurl-force-content-type

http://zengrong.net/post/2088.htm

http://stackoverflow.com/questions/25370991/libcurl-buffered-file-upload-not-working

通过HTTP协议上传文件

使用libcurl POST数据和上传文件

libcurl上传文件,添加自定义头的更多相关文章

  1. libcurl 上传文件,不管文件什么格式 libcurl开发指南

    libcurl 上传文件,不管文件什么格式 libcurl开发指南 上传文件 https://curl.haxx.se/download.html curl命令参数很多,这里只列出我曾经用过.特别是在 ...

  2. libcurl上传文件

    libcurl参数很多,一不小心就容易遇到问题.曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>   这里主要汇总一下,libcurl上传的二种方式: 1.直接上传文件,类似for ...

  3. libcurl 上传文件至 web服务器

    测试环境搭建, 使用 wamp server (windows下的 apache+MySQL+php) libcurl vc6 工程代码  下载地址:  http://download.csdn.ne ...

  4. 关于ckfinder上传文件添加自定义处理方案

    上篇博客中介绍了如何使用ckfinder中自定义按钮的功能,实现自定义上传的功能,但是却无法解决用户使用拖拽文件上传方式中添加自定义事件,今天我们来用另一种更简洁的方式来实现上传文件重名时做一些自定义 ...

  5. C语言 HTTP上传文件-利用libcurl库上传文件

    原文  http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们 ...

  6. 【转载】curl 模拟 GET\POST 请求,curl查看响应头 以及 curl post 上传文件

    补充说明:curl查看响应头 curl -I "http://www.baidu.com"HTTP/1.1 200 OK #HTTP协议 HTTP 返回码Server: Tengi ...

  7. django系列6--Ajax05 请求头ContentType, 使用Ajax上传文件

    一.请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST ...

  8. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  9. libcurl提交表单上传文件

    不多说了,curl的http上传文件代码示例,有需要的可以参考. int http_post_file(const char *url, const char *user, const char *p ...

随机推荐

  1. iOS学习笔记---oc语言第三天

    继承.初始化方法 一.继承 继承的上层:父类  继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量 ...

  2. win7 一些快捷系统工具命令

    1.cleanmgr: 打开磁盘清理工具 2.compmgmt.msc: 计算机管理 3.conf: 启动系统配置实用程序 4.charmap: 启动字符映射表 5.calc: 启动计算器 6.chk ...

  3. Java 性能优化实战记录(2)---句柄泄漏和监控

    前言: Java不存在内存泄漏, 但存在过期引用以及资源泄漏. (个人看法, 请大牛指正) 这边对文件句柄泄漏的场景进行下模拟, 并对此做下简单的分析.如下代码为模拟一个服务进程, 忽略了句柄关闭, ...

  4. 2015GitWebRTC编译实录2

    2015.07.17libyuvneon编译通过,可能需要验证才行.先继续下一个lib commonaudio[170/1600 ] CXX obj /webrtc/common_audio/comm ...

  5. my Highcharts

    1. a=a || {};  意义:如果a具有真值(不是undefined,null,NAN,false,0中的任意一种),则这个a可以被使用,否则将a定义为一个空的object对象{} 2. a | ...

  6. 第四课,T语言运算符(版本5.0)

    TC综合开发工具里支持了丰富的运算符,这样也要求大家对运算符的知识必须了解清楚,否则出现错误还不知道问题所在下面就为大家说说运算符的优先级与各个运算符含义 注意: 优先级代表同一表达式中运算符的运算顺 ...

  7. URAL 1056 Computer Net(最短路)

    Computer Net Time limit: 2.0 secondMemory limit: 64 MB Background Computer net is created by consecu ...

  8. Cent OS 6.5安装 php memcached扩展

    首先查看memcache的依赖库是否有安装,如果对这个有疑问可以参考php手册的memcache的安装需求说明 命令如下: 查询: rpm -qa | grep libevent 安装:yum -y ...

  9. PHP学习——数据类型

    PHP的数据是存在类型的概念的,弱类型指的是变量可以存储任何类型!一共8种,分别是:整型.浮点型.布尔型.字符串(标量类型) 数组.对象(符合类型) null.资源(特殊类型) 分成三大类: 标量类型 ...

  10. display:none,overflow:hidden,visibility:hidden之间的区别

    一,display:none; 隐藏元素,不占网页中的任何空间,让这个元素彻底消失(看不见也摸不着) 二,overflow:hidden; 让超出的元素隐藏,就是在设置该属性的时候他会根据你设置的宽高 ...