[英]PHP cURL timeout in redirections
我在一個公司網站上針對一個用例在PHP中測試了303重定向,但我注意到2個不同用例之間存在巨大的延遲,一個執行正常,而另一個持續10秒,我意識到這是我設置的超時時間( CURLOPT_TIMEOUT標志)。
測試是嘗試在重定向后將POST查詢轉換為GET查詢的情況。
我也使用301和302重定向對其進行了測試,結果是相同的。 最后,在為這個問題苦苦掙扎之后,我找到了解決方案,並且我認為分享它會很有趣。
重定向頁面
<?php
header("HTTP/1.1 303 See Other");
header("Location: http://127.0.0.1/test-303-redirection-2.html");
cURL示例腳本
<?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包裝器類中,它使用POST字段的長度添加了content-length標頭。 這樣就使標題發送如下:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'host: 127.0.0.1',
'accept: */*',
'content-length: 29',
'content-type: application/x-www-form-urlencoded'
)
);
只需從數組中刪除content-length標頭,就可以消除超時,執行過程也應該順利。 我希望這可以幫助別人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.