編碼的世界 / 優質文選 / 文明

php curl 默認超時時間的問題


2022年7月13日
-   

場景
curl調用一個接口,在代碼沒有後任何設置的情況下,我的環境是60秒,最後拿到的數據是null,
1. 這種情況肯定不要針對處理, 代碼內部的邏輯是redis隊列, 所以對數據進行處理下,重新入隊就好了;
2. 但是也是對curl 超時進行設置,將它控制起來

分析
PHP官網的解釋是主要是兩個選項,而且沒有默認值
. CURLOPT_CONNECTTIMEOUT 在嘗試連接時等待的秒數。設置為0,則無限等待。
. CURLOPT_TIMEOUT 允許 cURL 函數執行的最長秒數。
另外還可能被 `ini_get('default_socket_timeout')`影響(得空驗證一下)

解決
 $curl = curl_init();
//在http 請求頭加入 gzip壓縮
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip'));
//curl返回的結果,采用gzip解壓
curl_setopt($curl, CURLOPT_ENCODING, "gzip");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 在嘗試連接時等待的秒數
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT , 120);
// 最大執行時間
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
$gray_info = curl_exec($curl);
// curl debug
if (curl_errno($curl)) {
// TO DO Something
}

熱門文章