PHP curl 超時時間設定
阿新 • • 發佈:2019-02-06
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秒)才報錯了。