我有一段PHP代碼,可以將二進制代碼上傳到遠程服務器,我沒有shell訪問權限。 PHP代碼是:POST二進制(視頻)文件使用Python請求
function upload($uri, $filename) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file' => '@' . $filename));
curl_exec($ch);
curl_close($ch);
}
這導致像頭:
HTTP/1.1
Host: XXXXXXXXX
Accept: */*
Content-Length: 208045596
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------360aaccde050
我使用請求試圖端口這個交給Python和我不能讓服務器接受我的職務。我已經嘗試過使用requests.post的每種方式,但是頭文件不會模仿上述內容。
這將成功地將二進制文件傳輸到服務器(可以通過觀看Wireshark進行分析),但是由於標題並不是服務器期望被拒絕的。 response_code雖然是200。
files = {'bulk_test2.mov': ('bulk_test2.mov', open('bulk_test2.mov', 'rb'))}
response = requests.post(url, files=files)
的請求的代碼導致的頭:
HTTP/1.1
Host: XXXX
Content-Length: 160
Content-Type: multipart/form-data; boundary=250852d250b24399977f365f35c4e060
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: python-requests/2.2.1 CPython/2.7.5 Darwin/13.1.0
--250852d250b24399977f365f35c4e060
Content-Disposition: form-data; name="bulk_test2.mov"; filename="bulk_test2.mov"
--250852d250b24399977f365f35c4e060--
如何提出請求的任何想法,PHP代碼生成的頭相匹配?
拒絕*和*迴應代碼是200?大概會返回錯誤消息頁面? –
我注意到你的'Content-Length'只有160字節。這正是多部分邊界和元數據以及換行符的大小。 **您的文件似乎爲空**。 –
所以如果我使用'res = requests.post(url,data = open_file,headers = {'Content-Type':'multipart/form-data; boundary = -------------- -------------- 360aaccde050'})'我得到'Content-Length:208045390',這是準確的。但是標題又與服務器預期的不同 – user3524641