最近搞一个linux 下用CURL的库传输文件到服务器
#include <stdio.h>
#include <curl/curl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main(void)
{
char * Curl_addr = "192.168.1.1:8086";//服务器URL的地址
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, Curl_addr);
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;