簡體   English   中英

PHP Curl在標題中發送內容長度不起作用

[英]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.

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