0
我在我的公司網站之一中測試了303重定向的用例,我注意到兩個不同情況之間的巨大延遲,一個執行正常,另一個持續10秒,我意識到那是我設置的超時(使用CURLOPT_TIMEOUT標誌)。PHP cURL在重定向超時
該測試旨在嘗試重定向後POST查詢轉換爲GET查詢的情況。
我用301和302重定向測試了它,結果也一樣。最後,在解決了這個問題之後,我找到了解決方案,我認爲分享會很有趣。
重定向頁面
<?php
header("HTTP/1.1 303 See Other");
header("Location: http://127.0.0.1/test-303-redirection-2.html");
捲曲示例腳本
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/test-303-redirection-1.php");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "field1=value1&field2=value2");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'host: 127.0.0.1',
'accept: */*',
'content-length: 29',
'content-type: application/x-www-form-urlencoded'
)
);
$theResponse = curl_exec($ch);
print_r(curl_getinfo($ch)) ;
這個腳本歷時每個被執行的時間爲10秒。
真正的問題是當cURL PHP庫在將數組傳遞到CURLOPT_POSTFIELDS時自動設置內容長度時設置內容長度。如果你自己設置,服務器可能會期待這些數據而不迴應。 – Khriz