簡體   English   中英

重定向中的PHP cURL超時

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

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