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 headerscurl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);

//last free the header listcurl_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 postcurl_formfree(formpost);

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

二进制流上传:

//referer http://curl.haxx.se/mail/lib-2003-08/0190.htmlcurl_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数据和上传文件

时间: 2024-10-07 00:08:48

libcurl上传文件的相关文章

libcurl上传文件,添加自定义头

原文  http://www.cnblogs.com/meteoric_cry/p/4285881.html 主题 curl libcurl参数很多,一不小心就容易遇到问题.曾经就遇到过一个很蛋疼的问题:libcurl断点下载>> 这里主要汇总一下,libcurl上传的二种方式: 1.直接上传文件,类似form表单<input type=”file” />,<form enctype=”multipart/form-data”…: 2.上传二进制流: 至于设定自定义头,都是使

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

原文  http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们可以容易地实现这个功能.Libcurl是一个免费易用的客户端URL传输库,主要功能是用不同的协议连接和沟通不同的服务器,libcurl当前支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP,IMAPS, LDAP, LDAPS, POP3, POP3

libcurl提交表单上传文件

不多说了,curl的http上传文件代码示例,有需要的可以参考. int http_post_file(const char *url, const char *user, const char *pwd, const char *filename){    assert(url != NULL);    assert(user != NULL);    assert(pwd != NULL);    assert(filename != NULL); int ret = -1;    CURL

模拟POST上传文件

上传下载文件在浏览器里面都非常简单,上传文件在浏览器里就是几个标签,中间到底发生了什么我们全然不知,而下载文件更是简单——下载文件只需获得文件的地址以二进制的方式写出来就好.最近有个同学想在安卓里面做一个上传功能的App,最简单的莫过于HTTP的POST方法了(fork this  https://www.imququ.com/post/four-ways-to-post-data-in-http.html). 可以先观察下上传文件的HTTP Header: 可以看到Request Header

通过HTTP协议上传文件

HTTP是很常见的协议,虽然用得很多,但对细节的了解却是很浅,这回通过向服务端上传文件信息来理解细节.网络库的选择:1.WinHTTP是windows下常用的库:2.CURL是广受喜爱的开源库.对于我来说,libcurl最大的优点是使用方便,可以把注意力更多的集中到业务层上,提高工作效率,避免重造轮子:缺点是略大(MD编译有264KB,MT编译有340KB),不像WinHTTP可以由windows操作系统集成.下边展示如何使用这两种网络库实现表单POST文件. 一.libcurl 库下载:htt

万家报账平台没有“上传文件”按钮的解决办法

在有的电脑没有"上传文件"的按钮? 第一步:首先检查浏览器设置. 第二步:找到IE的Internet选项菜单,开启菜单栏的根据下列方面找,如下图: 第三步:找到Internet选项后,点击,选择安全选项卡,并点击"自定义级别" 第四步:找到"将文件上载到服务器时包含本地目录路径"选择"启用".然后点击确定关闭IE,重启打开. 第五步:更新浏览器的flash版本.在百度中搜索"flash player官网"即

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

数据采集之Web端上传文件到Hadoop HDFS

前言 最近在公司接到一个任务,是关于数据采集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志采集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好最近都有在这方面做知识储备.正所谓养兵千日,用兵一时啊.学习到的东西只有应用到真实的环境中才有意义不是么. 环境 这里只做模拟环境,而不是真实的线上环境,所以也很简单,如果要使用的话还需要优化优化. OS Debian 8.7 Hadoop 2.6.5 SpringBoot 1.5.1.RELEASE 说明一下,这

ssh连接服务器以及scp上传文件方法

本地控制台输入 ssh [email protected]外网ip或内网ip,举例:ssh [email protected]      这是用用户名为root的用户登录192.168.133.196这个地址所在的后台.如果提示以下红色部分错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@