libcurl上传文件,添加自定义头
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 */
直接上传文件:
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
libcurl上传文件,添加自定义头的更多相关文章
- libcurl 上传文件,不管文件什么格式 libcurl开发指南
libcurl 上传文件,不管文件什么格式 libcurl开发指南 上传文件 https://curl.haxx.se/download.html curl命令参数很多,这里只列出我曾经用过.特别是在 ...
- libcurl上传文件
libcurl参数很多,一不小心就容易遇到问题.曾经就遇到过一个很蛋疼的问题:libcurl断点下载>> 这里主要汇总一下,libcurl上传的二种方式: 1.直接上传文件,类似for ...
- libcurl 上传文件至 web服务器
测试环境搭建, 使用 wamp server (windows下的 apache+MySQL+php) libcurl vc6 工程代码 下载地址: http://download.csdn.ne ...
- 关于ckfinder上传文件添加自定义处理方案
上篇博客中介绍了如何使用ckfinder中自定义按钮的功能,实现自定义上传的功能,但是却无法解决用户使用拖拽文件上传方式中添加自定义事件,今天我们来用另一种更简洁的方式来实现上传文件重名时做一些自定义 ...
- C语言 HTTP上传文件-利用libcurl库上传文件
原文 http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们 ...
- 【转载】curl 模拟 GET\POST 请求,curl查看响应头 以及 curl post 上传文件
补充说明:curl查看响应头 curl -I "http://www.baidu.com"HTTP/1.1 200 OK #HTTP协议 HTTP 返回码Server: Tengi ...
- django系列6--Ajax05 请求头ContentType, 使用Ajax上传文件
一.请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- libcurl提交表单上传文件
不多说了,curl的http上传文件代码示例,有需要的可以参考. int http_post_file(const char *url, const char *user, const char *p ...
随机推荐
- centos 用户组
centos 用户组和用户的添加及所属问题 指定附加组 eg:dy 为组名 ,lisi 为用户,要把lisi 用户添加到 dy 组里面 useradd -G dy lisi 可以同时添加多个组, ...
- pstack使用和原理
前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于 ...
- ZOJ 3805--解题报告
题目相关: 3805相关链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5337 在二维的矩形上, 机器通过管道(pipe ...
- 关于java“配置环境变量”的那些事
我们刚开始学习java,都会面临编程路上的第一个小怪兽:配环境变量. 网上很多教程给了我们很多的参考,但我们是否有想过为什么要这么配呢?下面我就是想重点探讨一下为什么?并且希望以后你们不但能配,还知道 ...
- C专家编程学习 1
1.C语言的基本数据类型直接与底层硬件相对应. 2#define 是可能出现问题 1 2 3 4 5 #define a(y) a_ex(y) a(x)被扩展为 a_ex(x) #define a ...
- spark之数据源之自动分区推断
在hadoop上创建目录/spark-study/users/gender=male/country=US/users.parquet(并且把文件put上去) code: package cn.spa ...
- HDU-4035 Maze (概率DP求期望)
题目大意:在一个树形迷宫中,以房间为节点.有n间房间,每间房间存在陷阱的概率为ki,存在出口的概率为ei,如果这两种情况都不存在(概率为pi),那么只能做出选择走向下一个房间(包括可能会走向上一个房间 ...
- 嵌入式Linux开发——内容介绍与开发环境的搭建
嵌入式Linux开发步骤 设计自己的硬件系统 编写Bootloader 裁剪自己的Linux内核 开发移植设备驱动 构建根文件系统 开发应用程序 嵌入式Linux学习要点 熟练使用开发工具和相关指令集 ...
- Python正则表达式总结
正则表达式也一直用,但是没系统的总结过,今天借这个时间梳理一下. Python中的正则表达式操作依靠re模块儿完成. 常用的方法: re.compile(pattern,flags=0) #返回一个编 ...
- 【Unity3D基础教程】给初学者看的Unity教程(七):在Unity中构建健壮的单例模式(Singleton)
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! 该博客中的代码均出自我的开源项目 : 迷你微信 ...