2012-02-17 68 views
2

我們遇到了我們正在使用的api問題。php curl檢查url是否可以在查詢之前到達

這裏是我們使用的代碼(在API前命名沒有名字)出來

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://apiurl.com/whatever/api/we/call'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$ch_output = curl_exec($ch); 
curl_close($ch); 

這個響應時間,而不是年齡。這會嚴重拖慢我們的網絡應用程序,並且由於返回值不佳而導致進一步的代碼崩潰。這我可以修復,但是我不知道如何修復響應超時。有沒有什麼辦法可以在嘗試執行卷曲請求之前快速查看網址是否「響應」(例如終端中的ping等)?

謝謝。

+1

但是,即使您成功ping通了第二個,它也可能不會響應。 – Iznogood 2012-02-17 20:20:08

+0

是的,這是一個很好的觀點。 – 2012-02-17 20:23:06

+0

萍在這裏沒有什麼可做的。可能是ping存在,站點不可訪問,反之亦然。 而且 - 你不能ping通url-只有主機名。 – 2012-02-17 20:26:28

回答

3

您的意思是使用curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,NUMERIC_TIMEOUT_VALUE);來設置超時時間嗎?

+0

如果發生連接,請參閱'CURLOPT_TIMEOUT',但響應失速。 – goat 2012-02-17 20:21:51

+0

我沒有使用該標誌,所以它的默認超時時間,無論可能。什麼是api的合理超時值?目前劇本需要花費很長時間才能獲得保釋......我們真的需要將其切入真正的瞬間。你會用什麼?有點像400毫秒太短?太長? – 2012-02-17 20:25:42

+0

你可以給它幾秒鐘,如果超時,緩存一段時間的事實。這樣,其他腳本可以使用本地緩存進行快速檢查,以查看api最近是否無法使用。我認爲400毫秒是短暫的,因爲經常需要執行一次dns查找,並且這些查找可以很容易地單獨運行400毫秒,但是也許你偶爾會錯過一次錯誤超時。 – goat 2012-02-17 21:14:36

相關問題