1. 程式人生 > >PHP curl 超時時間設定

PHP curl 超時時間設定

CURLOPT_TIMEOUT好理解,就是整個curl請求過程(http request & response)的超時限制,以秒為單位,設定為0則無限制。 
CURLOPT_CONNECTTIMEOUT比較難理解,目前確認的是,這是curl請求過程中的一小部分,因此必須要設得比CURLOPT_TIMEOUT小,不然CURLOPT_TIMEOUT無意義。網上的資料是這麼說的:

CURLOPT_CONNECTTIMEOUT 在發起連線前等待的時間,如果設定為0,則無限等待。

這個發起連線前等待的時間比較模糊,我傾向於這指的是完成TCP三次握手過程前所耗費的時間,或者換句話說,TCP三次握手

的整個過程必須要在CURLOPT_CONNECTTIMEOUT內完成,否則就超時。TCP三次握手無法在指定時間內完成表示伺服器正處在繁忙/奔潰的狀態或網路異常,這正符合本文所提到的場景。 
基於這一猜想下,我把CURLOPT_CONNECTTIMEOUT設成3秒:

curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 3);

如此,就不需要在網路抖動的時候等待2分鐘(SDK設定的CURLOPT_CONNECTTIMEOUT是120秒)才報錯了。