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 ...
随机推荐
- Sqlserver 角色那些事
固定服务器角色 描述 sysadmin 可以在SQLServer 中执行任何活动. serveradmin 可以设置服务器范围的配置选项,关闭服务器. setupadmin 可以管理链接服务器和启动过 ...
- iOS学习笔记---oc语言第二天
实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc 注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- ...
- iOS学习笔记---c语言第十一天
函数指针 一.函数指针定义 //函数声明:声明我是一个什么函数 //求两个数的和 //函数的类型:int (int x,int y) //即:我是一个返回值为整型,有两个整型参数的函数. //函数名是 ...
- centos 用户组
centos 用户组和用户的添加及所属问题 指定附加组 eg:dy 为组名 ,lisi 为用户,要把lisi 用户添加到 dy 组里面 useradd -G dy lisi 可以同时添加多个组, ...
- 310. Minimum Height Trees
For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...
- Js 操作Json
JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合json标准的字符串,后者将符合json标准的字符串转化为js对象. parse方法相当于eval()方法 ...
- Windows PE 之 MASM32 环境搭建
操作系统 :Windows 10 IDE :VS2015 MASM版本 :V11 MASM下载地址:http://masm32.com masm32安装一路确认.OK (由于win10兼容性问 ...
- ✡ leetcode 162. Find Peak Element --------- java
A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...
- leetcode 114 Flatten Binary Tree to Linked List ----- java
Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...
- URAL(timus) 1272 Non-Yekaterinburg Subway(最小生成树)
Non-Yekaterinburg Subway Time limit: 1.0 secondMemory limit: 64 MB A little town started to construc ...