欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用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