使用CURL库,发送HTTP的POST的文件传输

31 篇文章 1 订阅

最近搞一个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

 

 

 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值