2012-12-10 79 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在服务器端进行请求的安全策略。 –