2012-12-10 97 views
7

我想爲我的應用程序創建一個API代理,但是我在Heroku上遇到了一些奇怪的超時錯誤。Heroku - cURL超時(PHP)

在下面說:

2012-12-10T12:49:24+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path=/api/v1/users/me host=host.herokuapp.com fwd=174.129.79.221 dyno=web.1 queue= wait= connect= service=30000ms status=503 bytes=0 

的代碼是類似以下內容:

$request = curl_init(); 
curl_setopt($request, CURLOPT_URL, $url); 
curl_setopt($request, CURLOPT_USERAGENT, 'AppProxy/1.0'); 
curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'Accept: application/json', 
    'Authorization: Basic ' . $authorization, 
    'X-Requested-With: XMLHttpRequest' 
)); 
curl_setopt($request, CURLOPT_VERBOSE, 1); 
curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, 0); 
$response = curl_exec($request); 
echo curl_errno($request) . "<br />"; 
echo curl_error($request) . "<br />"; 
echo $httpStatus = curl_getinfo($request, CURLINFO_HTTP_CODE) . "<br />"; 
curl_close($request); 
echo $response . "<br />"; 

有錯,還是我失去了對代碼得到這個工作的東西嗎? 任何人在Heroku上都有同樣的問題?

在此先感謝...

+0

您能否提供更多關於* API代理*的細節以及正常API使用情況之間的確切區別。 – Ranty

+0

@William Lepinski 你有沒有想過發生了什麼?在嘗試綁定本地PHP端點時,我遇到了同樣的錯誤。 –

回答

1

嘗試像這樣

curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 15); 

您cUrl作者要求設置超時多久需要給wget從它在運行框中鍵入相同的資源?

另外代碼503是服務不可用錯誤。你可以在瀏覽器中打開資源嗎?

+0

同樣的請求,例如郵差,只需要180ms。 –

+0

也許heroku方塊無法到達另一個方塊。如果你可以ssh進入heroku盒,然後從那裏嘗試一些診斷 –

+0

在這種情況下的另一個盒子是相同的盒子。我只是用一些不能在客戶端的敏感數據包裝請求。像代理一樣工作,但請求與已登錄用戶的APIKey一起發送(是的,我正在做一個單頁JS應用程序)。聽起來Heroku有一些使用CURL在服務器端進行請求的安全策略。 –