PHP和Curl不适用于特定网址

时间:2012-02-17 23:49:03

标签: php codeigniter curl

我有一个使用Curl的PHP脚本来获取有关我们网址的推文数量;以此网址为例:

http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com

另外,我正在使用Phil Sturgeon的Curl库为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网址运行正常;就在我将它部署到我们的服务器时,它会中断。

这是奇怪的事情。我尝试ssh'ing到我们的每个服务器并使用相同的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');

非常感谢任何建设性的意见。

谢谢,弗兰克

2 个答案:

答案 0 :(得分:0)

FYI,

永远不知道为什么Facebook网址有效,但Twitter没有。我们最终解决了这个问题,使用Tweet按钮的onShare处理程序调用AJAX服务,该服务手动增加共享计数;因此无需直接从Twitter检索共享计数。这不是一个完美的解决方案(它不会跟踪转发);但它足以满足我们的需求。

非常感谢大家。

答案 1 :(得分:0)

您可以尝试使用Postman查看“对话”实际发生了什么。它是Chrome的REST客户端 - https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm

我已经多次对抗REST API了,这有助于弄清楚发生了什么......