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. css ul li 水平布局问题

    可以有俩种方法,暂时只用float:left:   找到每一个li进行水平浮动 #hd_nav li{ border-right: 1px solid rgba(255,255,255,0.2); f ...

  2. 227. Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  3. Javascript模块化编程(三):require.js的用法【转】

    作者: 阮一峰 日期: 2012年11月 7日 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js ...

  4. Web上下文配置【MvcConfig】

    基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论. 项目说明如下: 1.db.sql是项目中用到的表,数据库使用的是oracle11g ...

  5. 修改host文件屏蔽视频广告和网站

    很多时候我们会需要屏蔽一些网站或者广告,类似XX网站,下木马病毒的网站,或者破解软件的时候.我们可以使用一些软件屏蔽,我这里是用windows系统自带的hosts文件来屏蔽的.这个文件有点类似精简版的 ...

  6. ogg 、 Shareplex和DSG RealSync 对比

    主流数据库容灾(复制)工具对比     Oracle Golden Gate Quest Shareplex DSG RealSync   公司概要   公司介绍 GoldenGate公司成立于200 ...

  7. 用margin还是用padding

    用margin还是用padding这个问题是每个学习CSS进阶时的必经之路. 分类: Html/CSS | 转载请注明: 出自 海玉的博客 本文地址: http://www.hicss.net/use ...

  8. lvm使用总结-转

    由于安装的kvm需要扩容,研究了下lvm的使用. LVM(Logical Volume Manager)逻辑卷管理器,做法是将物理分区通过软件组合未一个独立的大磁盘(VG,卷组),然后把这个大磁盘分成 ...

  9. maxscript,执行选中代码片段

    选中一行或几行代码,然后按数字小键盘上的Enter键,即可单独运行之.此法方便调试.

  10. OpenJudge计算概论-计算书费

    /*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算 ...