使用libcurl POST数据和上传文件

  • 为了具有通用性,将文件的内容读到了fc变量中,fclen是fc的长度。fc也可以是任何其它内容。curl 是 libcurl句柄。演示省略了很多显而易见的步骤。

     

    1. 普通的post请求,这里用curl_easy_escape对fc做了编码

    std::string data("req=plain");

    data.append("&file=");

    char *efc = curl_easy_escape(curl, fc, fclen);

    data.append(efc)

    curl_free(encoded);

     

    curl_easy_setopt(curl, CURLOPT_URL, PURGE_URL);

    curl_easy_setopt(curl, CURLOPT_POST, 1L);

    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());

    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data.size());

     

    2. multipart/formdata请求

    struct curl_httppost *formpost = 0;

    struct curl_httppost *lastptr  = 0;

    curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "reqformat", CURLFORM_PTRCONTENTS, "plain", CURLFORM_END);

    curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "file", CURLFORM_PTRCONTENTS, fc, CURLFORM_CONTENTSLENGTH, fclen, CURLFORM_END);

     

    curl_easy_setopt(curl, CURLOPT_URL, URL);

    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

    curl_easy_perform(curl);

    curl_formfree(formpost);

     

    3. multipart/formdata请求,不把文件读入fc,其它步骤相同

    curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "file", CURLFORM_FILE, "/path/filename", CURLFORM_END);

     

    4. 通过put上传文件

    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

    curl_easy_setopt(curl, CURLOPT_PUT, 1L);

    curl_easy_setopt(curl, CURLOPT_READDATA, fp);   // FILE *fp = fopen("/path/filename");

    curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, fsize);  // fsize = sizeof /path/filename

     

    5. 发送自己的Header

    struct curl_slist *slist = 0;

    slist = curl_slist_append(slist, "Blog-X-User: username");

    slist = curl_slist_append(slist, "Blog-X-Signature: signature");

    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);

    curl_slist_free_all(slist);

时间: 2024-09-20 04:17:16

使用libcurl POST数据和上传文件的相关文章

Asp.Net模拟表单提交数据和上传文件的实现代码_实用技巧

如果你需要跨域上传内容到另外一个域名并且需要获取返回值,使用Asp.Net的作为代理是最好的办法,要是客户端直接提交到iframe中,由于跨域是无法用javascript获取到iframe中返回的内容的.此时需要在自己的网站做一个动态页作为代理,将表单提交到动态页,动态页负责将表单的内容使用WebClient或HttpWebRequest将表单数据再上传到远程服务器,由于在服务器端进行操作,就不存在跨域问题了. WebClient上传只包含键值对的文本信息示例代码: 复制代码 代码如下: str

服务器-libcurl Post 方法上传文件求助!

问题描述 libcurl Post 方法上传文件求助! Hi 我在我的虚拟机上编译好了libcurl库,然后参照列程写了个简单的http post上传文件. 在构建form表单的时候,如果把参数设置为CURLFORM_FILE 并输入对应的文件名,可以再服务器(HFS)指定的文件路径下看到我上传的文件. 但我要使用libcurl的平台没有文件系统,所以就打算用CURLFORM_BUFFER参数来设置数据区.结果这个能够上传,可是不能再文件路径下看到这个文件. HFS的上传权限打开了的. 对比两种

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 [源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之通信的新特性 下载数据(显示下载进度,将下载数据保存到本地) 上传数据(显示上传进度) 上传文件 示例HTTP 服务端WebServer/HttpDemo.

C++下怎么实现FTP客户端?只要连接和上传文件就行,谢谢

问题描述 如题:C++下怎么实现FTP客户端?只要连接和上传文件就行,谢谢最好有例子了,谢谢 解决方案 解决方案二:看看http://msdn.microsoft.com/en-us/library/windows/desktop/aa384180%28v=vs.85%29.aspx解决方案三:codeproject.com上面搜ftp那太多太多了.随便那个都实现了啊

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.

网页上有个上传文件控件,如何用程序控制上传

问题描述 公司有个内网,每天固定时间都要上传一个excel文档把数据导入数据库,但如何不用键盘鼠标来做到这点我一直搜不到好的办法.显然,建一个winform放一个webbrowser是不能胜任的,因为对于webbrowser弹新窗口的处理我都做不好,更别提弹出文件浏览框了.而且似乎现在的IE没法直接把文件地址通过代码输入到上传控件里了.其次,用post的办法也是网上搜到的解决办法之一,对于登录网站这种简单的参数post我已经做到了,不过要上传文档的话,通过IE的开发者模式截取到大量数据,单单VI

plupload+artdialog实现多平台上传文件_javascript技巧

在没介绍正文之前先给大家介绍下plupload知识 plupload简介 Plupload是有TinyMCE的开发者开发的,为您的内容管理系统或是类似上传程序提供一个高度可用的上传插件.Plupload 目前分为一个核心API 和一个jQuery上传队列部件,这样使你可以直接使用或是自己定制. plupload特性 Plupload使用jQuery的组件做为选择文件和上传文件的队列组件. Plupload使用Flash,Silverlight,HTML5,Gears,BrowserPlus.Fi

php上传文件并存储到mysql数据库的方法

 这篇文章主要介绍了php上传文件并存储到mysql数据库的方法,以完整实例形式较为详细的分析了php操作文件上传与数据库存储的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php上传文件并存储到mysql数据库的方法.分享给大家供大家参考.具体分析如下: 下面的代码分别用于创建mysql表和上传文件保存到mysql数据库 创建mysql表: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php $con = mysql_connect(&quo

php上传文件并存储到mysql数据库的方法_php技巧

本文实例讲述了php上传文件并存储到mysql数据库的方法.分享给大家供大家参考.具体分析如下: 下面的代码分别用于创建mysql表和上传文件保存到mysql数据库 创建mysql表: <?php $con = mysql_connect("localhost", "", ""); mysql_select_db("w3m"); $sql = "CREATE TABLE updfiles (" . &