簡體   English   中英

libcurl HTTP 請求在 MIME 數據中設置 content-disposition 和 content-type

[英]libcurl HTTP request set content-disposition and content-type in MIME data

我正在嘗試使用libcurl在 twitter 上上傳圖像,我使用twurl命令行工具生成 HTTP 請求並查看它的外觀,我得到的是:

POST /1.1/media/upload.json HTTP/1.1
Accept: */
Content-Type: multipart/form-data, boundary="00Twurl342528555775455418lruwT99"
Authorization: OAuth oauth_body_hash="XXX", oauth_consumer_key="XXX", oauth_nonce="XXX", oauth_signature="XXX", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1603308767", oauth_token="XXX", oauth_version="1.0"
Connection: close
Host: upload.twitter.com
Content-Length: 612739
--00Twurl342528555775455418lruwT99
Content-Disposition: form-data; name="media"; filename="image.png"
Content-Type: application/octet-stream


binary data of image.png

--00Twurl342528555775455418lruwT99--

目前我可以通過 libcurl 生成的請求(使用 curl verbose 得到它)是這樣的:

POST /1.1/media/upload.json HTTP/2
Host: upload.twitter.com
accept: */*
authorization: OAuth oauth_consumer_key="XXX",oauth_nonce="XXX",oauth_signature="XXX",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1603372043",oauth_token="XXX",oauth_version="1.0"
content-length: 268
content-type: multipart/form-data; boundary=------------------------d1b0fc28e693c24a

使用以下代碼:

curl_mime     *mime = nullptr;
curl_mimepart *part = nullptr;

mime = curl_mime_init(request_handle);
part = curl_mime_addpart(mime);

curl_mime_name(part, "media");
curl_mime_filename(part, "image.png");

curl_easy_setopt(request_handle, CURLOPT_MIMEPOST, mime);

問題是我不知道如何使用 libcurl 使我的請求類似於第一個請求,如何指定Content-TypeContent-Disposition

編輯:解決方案

完整代碼

curl_mime*     mime = nullptr;
curl_mimepart* part = nullptr;

/* initialize mime part */
mime = curl_mime_init(request_handle);
part = curl_mime_addpart(mime);

/* content-disposition: form-data; name="media"; filename="image.png" */
curl_mime_name(part, "media");
curl_mime_filename(part, "image.png");

/* add file content */
curl_mime_filedata(part, "image.png");

/* content-type: application/octet-stream */
curl_mime_type(part, "application/octet-stream");

/* link the MIME data to your curl handle */
curl_easy_setopt(request_handle, CURLOPT_MIMEPOST, mime);

我這樣做不是為了突出要使用的函數,而是檢查函數返回。

如何指定Content-TypeContent-Disposition

只需閱讀精美的手冊(您可以從精美的示例postit2.c導航到該手冊

CURLcode curl_mime_type(curl_mimepart * part, const char * mimetype);

curl_mime_type設置 mime 部分的內容類型

CURLcode curl_mime_filename(curl_mimepart * part, const char * filename);

curl_mime_filename設置 mime 部分的遠程文件名。 設置遠程文件名后,內容數據將作為文件處理,無論部件的內容源是什么。 部件的遠程文件名在關聯的Content-Disposition生成的標頭中傳輸到服務器。

官方的 libcurl教程也很不錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM