日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

libcurl上传文件

發(fā)布時(shí)間:2023/11/29 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libcurl上传文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

libcurl參數(shù)很多,一不小心就容易遇到問題。曾經(jīng)就遇到過一個(gè)很蛋疼的問題:libcurl斷點(diǎn)下載>>

?

這里主要匯總一下,libcurl上傳的二種方式:

1、直接上傳文件,類似form表單<input type=”file” />,<form enctype=”multipart/form-data”…;

2、上傳二進(jìn)制流;

?

至于設(shè)定自定義頭,都是使用一樣的方法

struct curl_slist *headers=NULL;
headers = curl_slist_append(headers, "Content-Type: text/xml");
headers = curl_slist_append(headers, "Accept: text/html, */*;q=0.01");
//...

//set headers
curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);


//last free the header list
curl_slist_free_all(headers); /* free the header list */
前往官網(wǎng)查看CURLOPT_HTTPHEADER>>

?

直接上傳文件:

struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
?
curl_formadd(&formpost, &lastptr,
??? CURLFORM_COPYNAME, "uploadfile",
??? CURLFORM_FILE, "/",//imagepath
??? CURLFORM_CONTENTTYPE, "Image/jpeg",
??? CURLFORM_END);
?
curl_formadd(&formpost, &lastptr,
??? CURLFORM_COPYNAME, "filename",
??? CURLFORM_COPYCONTENTS, "test.jpg",
??? CURLFORM_END);
?
curl_easy_setopt(m_curl,CURLOPT_HTTPPOST,formpost);
?
//last free post
curl_formfree(formpost);
如果上傳其它文件類型,那就在curl_formadd中附加CURLFORM_CONTENTTYPE參數(shù)(Content-Type/Mime-Type)
二進(jìn)制流上傳: //referer http://curl.haxx.se/mail/lib-2003-08/0190.html
curl_formadd(&post, &last,
???????????? CURLFORM_COPYNAME, "file",
???????????? CURLFORM_BUFFER, "unnamed.png",
???????????? CURLFORM_BUFFERPTR, memblock,????
???????????? CURLFORM_BUFFERLENGTH, memblock_length,
???????????? CURLFORM_CONTENTTYPE, "image/png",
???????????? CURLFORM_END);

?
‘' is the name of this part, 'unnamed.png' is the name set in the file name field.

上面的參數(shù)均不可缺省,如果缺省結(jié)果可能不太符合預(yù)期。其中Content-Type默認(rèn)為“application/octet-stream”

CURLFORM_COPYNAME為上傳的字段名,如上圖所示(name之后)

CURLFORM_BUFFER? 在沒有使用CURLFORM_FILE上傳自定義文件時(shí)使用,它用來告訴libcurl文件內(nèi)容已經(jīng)在緩存中了,在內(nèi)容的頭信息中它提供了filename字段。我之前沒加這個(gè)參數(shù)發(fā)現(xiàn)一直上傳不成功- -

*** 還有一個(gè)地方要注意的是:CURLFORM_BUFFERLENGTH它的類型必須為long

?

為了方便測試,我使用了node.js的formidable來調(diào)試

?

?

參考鏈接:

http://curl.haxx.se/libcurl/c/curl_formadd.html

http://curl.haxx.se/libcurl/c/libcurl-tutorial.html

http://curl.haxx.se/libcurl/c/postit2.html

http://stackoverflow.com/questions/14685196/c-libcurl-force-content-type

http://zengrong.net/post/2088.htm

http://stackoverflow.com/questions/25370991/libcurl-buffered-file-upload-not-working

通過HTTP協(xié)議上傳文件

使用libcurl POST數(shù)據(jù)和上傳文件

總結(jié)

以上是生活随笔為你收集整理的libcurl上传文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。