【发布时间】:2012-02-17 23:49:03
【问题描述】:
我有一个 PHP 脚本,它使用 Curl 来获取关于我们 URL 的推文数量;以这个网址为例:
http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com
另外,我正在使用 Phil Sturgeon 的 Curl 库 for CodeIgniter 来执行获取: https://github.com/philsturgeon/codeigniter-curl
当我在本地运行脚本时,脚本运行良好。但是,当我将它部署到我们的生产环境时,它会在尝试访问上述 Twitter URL 时立即中断。
这是奇怪的事情。我对来自 Facebook Graph 的相同基本 URL 执行类似的计数检索,它适用于生产服务器。请看下面的示例代码:
$fb_get_url = "http://graph.facebook.com/?ids=http://stackoverflow.com";
$twitter_get_url = "http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com";
$fb_response_json = $this->curl->simple_get($fb_get_url, array(CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_FAILONERROR => true));
$twitter_response_json = $this->curl->simple_get($twitter_get_url, array(CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_FAILONERROR => true));
simple_get 可以很好地与 $fb_get_url 配合使用。但是,当我让 Curl 访问 $twitter_get_url 时,我似乎遇到了错误。不幸的是,我无法告诉您错误是什么,因为连接会在错误发生后立即重置。另外,提醒你一下,我自己机器上的相同 Twitter url 可以正常工作;就在我将它部署到我们的服务器时,它就坏了。
这是奇怪的事情。我尝试通过 ssh 连接到我们的每台服务器,并使用相同的 url 从命令行执行 Curl,它成功了。这向我证明呼叫没有被防火墙或其他东西阻止。
所以我想弄清楚的是:为什么从 CL 运行 Curl 有效,但使用 Curl lib 获取相同的 URL 似乎会中断?我不认为这是我正在使用的 CI Curl 库中的错误,因为我也尝试使用 http://php.net/manual/en/book.curl.php 中的 http_response 函数进行测试,但它似乎也引发了错误。
至于确切的错误;我对错误的唯一线索是脚本需要很长时间才能失败并重置连接;所以我想这可能是一个超时。我将以下代码放在控制器顶部以启用错误显示;但仍然没有收到任何错误消息:
error_reporting(E_ALL);
ini_set( 'display_errors','1');
非常感谢任何建设性的意见。
谢谢,弗兰克
【问题讨论】:
-
这不是您问题的答案,但看起来您获取推特计数的方式并未得到官方允许。见dev.twitter.com/discussions/5653
-
您是否尝试过在不使用库的情况下构建 CURL 请求?
-
是的,我尝试了直接的 PHP Curl 请求,而不是使用库;有同样的问题。
-
您是否尝试过检查 $this->curl->error_code 或 $this->curl->error_string 以获取有关 curl 正在做什么的更多信息?
-
这可能是一个愚蠢的问题,但是 PHP 中是否启用了 CURL 支持?在您的生产服务器上创建一个 phpinfo.php,其中包含
<?php phpinfo();。查找curl部分。
标签: php codeigniter curl