使用CURL库,发送HTTP的POST的文件传输
程序员文章站
2022-05-07 15:18:26
...
最近搞一个linux 下用CURL的库传输文件到服务器
#include <stdio.h>
#include <curl/curl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main(void)
{
curl_global_init(CURL_GLOBAL_ALL);
CURL* hCurl = curl_easy_init();
if(hCurl != NULL)
{
struct curl_slist* pOptionList = NULL;
//添加HTTP的包头 Expect:防止数据大于1024个字节 需要等待服务响应
//也许有Expect: 100-continue,去掉它
pOptionList = curl_slist_append(pOptionList, "Expect:");
curl_easy_setopt(hCurl, CURLOPT_HTTPHEADER, pOptionList);
struct curl_httppost* pFormPost = NULL;
struct curl_httppost* pLastElem = NULL;
//上传文件,指定本地文件完整路径
curl_formadd(&pFormPost, &pLastElem, CURLFORM_COPYNAME, "888888.png", CURLFORM_FILE, "/home/topeet/DEMO/CURL/888888.png", CURLFORM_CONTENTTYPE, "application/octet-stream", CURLFORM_END);
//不加一个结束的hfs服务端无法写入文件,一般不存在这种问题,这里加入只是为了测试.
//curl_formadd(&pFormPost, &pLastElem, CURLFORM_COPYNAME, "end", CURLFORM_COPYCONTENTS, "end", CURLFORM_END);
curl_easy_setopt(hCurl, CURLOPT_HTTPPOST, pFormPost);
curl_easy_setopt(hCurl, CURLOPT_URL, "http://47.106.211.97:8086/fileUpload?fileName=888888.png&command=dwm&deviceNo=888888");
CURLcode res = curl_easy_perform(hCurl);
if(res != CURLE_OK)
{
printf("error\n");
}
curl_formfree(pFormPost);
curl_easy_cleanup(hCurl);
}
curl_global_cleanup();
return 0;
}
上面这段代码是可以编译通过的,测试了一下上传也是没问题的。
还参考了CURL的官方API的库 https://curl.haxx.se/libcurl/c/
和curl_formadd() 里面的参数的问题,https://curl.haxx.se/libcurl/c/curl_formadd.html
CURLFORM_FILE 是文件的绝对路径。
CURLFORM_CONTENTTYPE 这个定义的类型有 http://tool.oschina.net/commons;
上一篇: curl发送带请求头,带请求参数,带cookie的请求
下一篇: 使用CURL模拟表单上传文件
推荐阅读
-
C#模拟http 发送post或get请求的简单实例
-
Linux下模拟http的get/post请求(curl or wget)详解
-
python使用urllib2提交http post请求的方法
-
python通过get,post方式发送http请求和接收http响应的方法
-
详解使用fetch发送post请求时的参数处理
-
python利用requests库模拟post请求时json的使用
-
PHP的cURL库功能简介 抓取网页、POST数据及其他
-
使用nginx代理gogs遇到推送代码错误的问题(RPC failed; HTTP 413 curl 22 The requested URL returned error: 413)
-
python使用scrapy发送post请求的坑
-
PHP的cURL库简介及使用示例