- 为了具有通用性,将文件的内容读到了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);
使用libcurl POST数据和上传文件
时间: 2024-10-08 17:45:12
使用libcurl POST数据和上传文件的相关文章
重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件
原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之通信的新特性 下载数据(显示下载进度,将下载数据保存到本地) 上传数据(显示上传进度) 上传文件 示例HTTP 服务端WebServer/HttpDemo.aspx.cs /* * 用于响应 http 请求 */ using System; using System.IO;
django-form.errors和上传文件
一.上传文件: 在相应的模型里面定义`FileField`或者是`ImageField`类型的字段,并且1.设置好`upload_to`参数来指定上传的路径. headshot = models.ImageField(u'头像', upload_to="upload/%Y/%m/%d") # 上传的路径,django自己创建路径 如果是使用ImageField,会需要安装一个依赖Pillow, Pillow是专门做图片处理的一个python包 pip install Pillow 2
在XShell中使用sz和rz命令下载和上传文件
输入命令:sz filename 回车后弹出一个"浏览文件夹"对话框中,选择保存目录 END 使用rz上传文件 输入命令: rz 回车后弹出一个对话框,选择一个或多个文件,选择"打开" 3 上传到服务器的路径为当前执行rz命令的目录,输入命令: dir 查看上传的文件 END
vue+axios通过formdata提交参数和上传文件
demo.vue 文件 <template> <div class="demo"> <input v-model="importForm.month" type="text" name="month"/> <input ref="importFile" type="file" name="importFile" @change
ASIHttpRequest加载网络数据和上传数据功能
使用ASIHttpRequest第三库,需要配置 二, 上传数据功能使用ASIFromDataRequest(可以上传二进制和字符串给服务器) 下面来牛刀小试 //建立一个工程,导入第三方库,在AppDelegate.h #import <UIKit/UIKit.h> #import "ASIFormDataRequest.h" @interface AppDelegate : UIResponder <UIApplicationDelegate,ASIHTTPReq
ansible 通过网络下载和上传文件
1.通过http下载文件,并且不验证证书 - name: download files by https get_url: url: https://robin.org.cn/test.zip dest: /appvol/ansible-test/ validate_certs: no 2. 原文地址:https://www.cnblogs.com/lihuanhuan/p/10957931.html
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.上传二进制流: 至于设定自定义头,都是使
libcurl上传文件
libcurl参数很多,一不小心就容易遇到问题.曾经就遇到过一个很蛋疼的问题:libcurl断点下载>> 这里主要汇总一下,libcurl上传的二种方式: 1.直接上传文件,类似form表单<input type="file" />,<form enctype="multipart/form-data"-: 2.上传二进制流: 至于设定自定义头,都是使用一样的方法 struct curl_slist *headers=NULL;
原生js上传文件,使用new FormData()
当创建一个内容较多的表单,表单里面又有了文件上传,文件上传也需要表单提交,单一的上传文件很好操作: <form action="接口" enctype="multipart/form-data" method="post"> <input type="file" name="uploadFile"/> <input type="submit" value=&