Heroku - cURL(PHP)超时问题

8
我正在尝试为我的应用程序创建API代理,但在Heroku上遇到了一些奇怪的超时错误。
它显示如下:
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上有人遇到了同样的问题吗?

提前感谢...


你能提供关于“API代理”更多的细节以及与正常API使用的确切区别吗? - Ranty
@William Lepinski你最终搞清楚了发生了什么吗?当我尝试cURL本地PHP端点时,我也遇到了同样的错误。 - Jon Willis
1个回答

1

尝试在您的cUrl请求上设置超时时间,如下所示

curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 15);

从运行的服务器中使用wget下载同一资源需要多长时间?

另外,代码503是“服务不可用”错误。您能在浏览器中打开该资源吗?


同样的请求,例如在Postman上进行,只需要180毫秒。 - William Lepinski
也许heroku盒子无法连接到另一个盒子。如果您可以ssh到heroku盒子,请尝试从那里进行一些诊断。 - darryn.ten
在这种情况下,另一个框是相同的框。我只是用一些敏感数据包装请求,这些数据不能在客户端上。它像代理一样工作,但请求与已登录用户的API密钥一起发送(是的,我正在使用单页JS应用程序)。听起来像Heroku对使用CURL进行服务器端请求的安全策略有一些限制。 - William Lepinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接