【发布时间】:2011-06-27 01:58:38
【问题描述】:
当我在特定的 url 上运行 curl 时,尽管我已将错误报告设置为开启,但该站点会停止响应并且不会生成错误。我尝试将 curl 超时设置为低值,然后它会产生错误,所以我知道它不会超时。
我想知道的主要事情是,这怎么可能发生,我怎么知道为什么?
我试图访问的 url 是对 Factual api 的调用,以及我在这里使用的 url
(http://api.factual.com/v2/tables/bi0eJZ/read?api_key=*apikey*&filters={"category":"Automotive","$loc":{"$within":{"$center":[[41,-74],80467.2]}})
当你把它放在浏览器中时工作。如果您将纬度和经度更改为基本上任何其他值,则 php 脚本会按预期工作。
error_reporting(E_ALL);
ini_set('display_errors', '2');
$url="http://api.factual.com/v2/tables/bi0eJZ/read?api_key=*apikey*&filters={\"category\":\"Automotive\",\"\$loc\":{\"\$within\":{\"\$center\":[[41,-74],80467.2]}},\"website\":{\"\$blank\":false}}";
Echo "\n\n1";
$ch = curl_init($url);
Echo 2;
curl_setopt($ch, CURLOPT_HEADER, 0);
Echo 3;
curl_setopt($ch, CURLOPT_POST, 1);
Echo 4;
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
Echo 5;
$output = curl_exec($ch) or die("hhtrjrstjsrjt".curl_error($ch));
Echo 6;
curl_close($ch);
Echo "out: ".$output;
【问题讨论】:
-
您可以尝试设置不同的用户代理;我们以前也遇到过垃圾邮件问题,并且我们用我们不喜欢的用户代理做了一些有趣的事情。
-
另外,发布您的 API 密钥可能不是一个好主意
-
一件事:
$output = curl_exec($ch) or die("hhtrjrstjsrjt".curl_error($ch));不会做你所期望的。基本上,它正在执行$output = (curl_exec($ch) or die("hhtrjrstjsrjt".curl_error($ch)));,因为它返回的是布尔值而不是字符串。相反,要么将错误检查移到下一行,要么像这样显式分组:($output = curl_exec($ch)) or die("hhtrjrstjsrjt".curl_error($ch)); -
ircmaxell,让我感到困惑的主要事情是它永远不会进入下一行,即使没有“或死”。将用户代理更改为我的浏览器似乎也没有任何作用。
-
我遇到了同样的问题。没有错误被抛出,脚本就死掉了。