libcurl上傳文件,添加自定義頭


libcurl參數很多,一不小心就容易遇到問題。曾經就遇到過一個很蛋疼的問題:libcurl斷點下載>>

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

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

2、上傳二進制流;

至於設定自定義頭,都是使用一樣的方法

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 */
前往官網查看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參數( Content-Type/Mime-Type )

二進制流上傳:

//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); ‘file' is the name of this part, 'unnamed.png' is the name set in the file name field.

上面的參數均不可缺省,如果缺省結果可能不太符合預期。其中Content-Type默認為“application/octet-stream”

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

CURLFORM_BUFFER  在沒有使用CURLFORM_FILE上傳自定義文件時使用,它用來告訴libcurl文件內容已經在緩存中了,在內容的頭信息中它提供了filename字段。我之前沒加這個參數發現一直上傳不成功- -

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

為了方便測試,我使用了node.js的 formidable 來調試

參考鏈接:

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協議上傳文件

使用libcurl POST數據和上傳文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM