[英]PHP Curl sending content-length in header not working
我正在使用Curl將照片上傳到實際網站。 我可以從Fiddler中看到標題如下:
Host: test.example.com
Proxy-Connection: keep-alive
Data-Type: json
Accept-Encoding: gzip, deflate
Content-Length: 62601
Content-Type: application/json
Accept-Language: en-us
Accept: application/json
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36
我正在使用上述確切的標題。 我正在使用filesize
獲取content-length
的值
$file = 'test.jpg';
$file_size = filesize($file);
$headers = array(
"Host: test.example.com",
"Proxy-Connection: keep-alive",
"Data-Type: json",
"Accept-Encoding: gzip, deflate",
"Content-length: $file_size",
"Content-Type: application/json",
"Accept-Language: en-us",
"Connection: keep-alive",
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
我實際上並不需要標題,腳本通常在沒有它的情況下也可以工作,但是它失敗的頻率太高了,目的是為了排除我將標題插入的麻煩。
除了content-length
之外,所有頭文件都可以正常工作。 當我輸入時,我從服務器收到響應,指示命令格式不正確(我無法在此處顯示實際響應)。 我對content-length
了解不多,但是我相信這可以告訴服務器文件的大小,並有助於確定上傳是否完整。 我認為,如果我能正常工作,將會增加腳本的穩定性。
我將不勝感激任何幫助。
如果要發送帶有curl的文件,請將完整的filePath放在@之前,curl將處理其余的文件。
$headers = array(
"Proxy-Connection: keep-alive",
"Data-Type: json",
"Accept-Encoding: gzip, deflate",
"Content-Type: application/json",
"Accept-Language: en-us",
"Connection: keep-alive",
);
$data = array(
'fieldForFile' => '@'. $filePath //Don't forget @ and the complete file path to the file
'anyOtherFields' => $value,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
// Use CURLOPT_USERAGENT for setting the user agent
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $POST_DATA);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
// Error handling
if($errno = curl_errno($ch)) {
$error_message = curl_strerror($errno);
echo "cURL error ({$errno}):\n {$error_message}";
} else {
echo "Success";
}
curl_close ($ch);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.