2015-10-13 36 views
0

我在IIS 7中使用PHP。 早些時候我有PHP 5.3它工作正常。 現在我已經遷移到了PHP 5.5,我得到了「HTTP錯誤411.請求必須被分塊或者有一個內容長度。」捲曲請求錯誤。IIS PHP 5.5 - HTTP錯誤411.該請求必須分塊或有一個內容長度

我是谷歌搜索解決方案,但無法得到任何提示。

下面是我使用的示例代碼:

$request = "https://example.com?searchTxt=" . $keyword . "&count=" . $count; 
    $data = "[1]"; 
    $data_encoded = utf8_encode($data); 
    // Initialize the session 
    $session = curl_init($request); 
    // Set curl options 
    curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($data_encoded))); 
    curl_setopt($session, CURLOPT_POST, 1); 
    curl_setopt($session, CURLOPT_POSTFIELDS, $data_encoded); 
    curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($session, CURLOPT_SSL_VERIFYPEER, 1); 
    curl_setopt($session, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($session, CURLOPT_AUTOREFERER, 1); 
    curl_setopt($session, CURLOPT_FAILONERROR, FALSE); 
    curl_setopt($session, CURLOPT_USERPWD, USERNAME . ':' . PASSWORD); 
    curl_setopt($session, CURLOPT_VERBOSE, TRUE); // Display communication with server 
    curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_NTLM) ; 
    curl_setopt($session, CURLOPT_CAINFO, CERTIFICATE_PATH); 
    curl_setopt($session, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
    // Make the request 
    $response = curl_exec($session); 
+1

通常情況下,您不需要在'CURLOPT_HTTPHEADER'中設置內容長度, – Raptor

+0

但我已經添加了。那有什麼問題嗎?它工作正常在PHP 5.3 –

+0

@Raptor嘿謝謝,我已經刪除了''Content-Length:'。strlen($ data_encoded)「,它的工作正常。但我無法得到。這條線的問題是什麼? –

回答

1

你並不需要在請求頭中明確添加的內容長度。 cURL將添加(計數)長度並在需要時添加。

由於strlen()並不多字節友好,strlen(utf8_encode($data_encoded))如你預期的那樣工作。對於UTF-8字符,您應該使用mb_strlen()。請參閱documentation

另外,如果您的$data_encoded未在ISO-8859-1中進行編碼,則該函數也不能按預期工作;該函數實際上是一個ISO-8859-1到UTF-8轉換器。請參閱documentation

最後,根據您的代碼,$data_encoded來自無處。

相關問題