第一次捲曲用戶,使用vC++的http multipart/form-data
請求處理curl文件上載。multipart/form-data http post請求curl vC++
經過研究,我發現有兩種方法可以提出multipart/form-data
請求。使用「CURLOPT_POSTFIELDS
」將值設置爲數組或使用formadd並將指針傳遞給CURLOPT_POSTFIELDS
。我決定做第二次,並使用「formdata」(兩個字段,一個文件(應用程序/ sla)和另一個來源(文本/純文本)配置請求的不同字段。
我使用wireshark來捕獲請求並看到CURL返回CURLE_READ_ERROR (26)
然後我添加CURLFORM_FILECONTENT「tmp_3DButton.stl」並獲得CURL_OK,但發送請求的服務器返回「Bad Media Type」,並且我看到CURL沒有將我的請求作爲多部分發送。
(win8的64位,視覺工作室2015,捲曲,C++
CURL *curl;
CURLcode res;
char error[CURL_ERROR_SIZE];
struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = NULL;
curl_global_init(CURL_GLOBAL_ALL);
// Fill in the file upload field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "file",
CURLFORM_CONTENTTYPE, "application/sla",
CURLFORM_FILECONTENT, "tmp.stl",
CURLFORM_FILE, filePathSTL,
CURLFORM_END);
// Fill in the filename field
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "origin",
CURLFORM_CONTENTTYPE, "text/plain",
CURLFORM_FILENAME, "se_1_0",
CURLFORM_END);
curl = curl_easy_init();
headerlist = curl_slist_append(headerlist, "Accept: text/plain");
if (curl) {
// URL that receives this POST
curl_easy_setopt(curl, CURLOPT_URL, "http://blabla.com/upload");
//multipart/form-data
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
2);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
error[0] = 0;
// Perform the request, res will get the return code
res = curl_easy_perform(curl);
CString str;
// Check for errors
if (res != CURLE_OK)
{
str.Format("curl_easy_perform return %s [%d]", curl_easy_strerror(res), res);
size_t len = strlen(error);
if (len)
{
_bstr_t bstrt(error);
AfxMessageBox(error);
}
}
curl_easy_cleanup(curl);
filePathSTL是例如bstrt(用雙斜線..)