У меня есть PHP-скрипт, который использует Curl для получения количества твитов о наших URL;используя этот URL в качестве примера:
http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com
Кроме того, я использую библиотеку Curl Фила Стерджона для CodeIgniter для выполнения операций get: https://github.com/philsturgeon/codeigniter-curl
Когда язапустить скрипт локально, скрипт работает нормально.Однако, когда я развертываю его в нашей производственной среде, он ломается, как только пытается получить доступ к вышеуказанному URL-адресу Twitter.
Вот странная вещь.Я выполняю поиск аналогичного количества для того же базового URL-адреса из графика Facebook, и он работает на производственных серверах.Смотрите пример кода ниже:
$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.К сожалению, я не могу сказать вам, в чем ошибка, так как соединение продолжает сбрасываться сразу после ошибки.Кроме того, чтобы напомнить вам, тот же URL-адрес Twitter на моей собственной машине работает отлично;просто когда я развертываю его на наших серверах, он ломается.
Вот странная вещь.Я попробовал ssh'ing на каждом из наших серверов и запустил Curl из командной строки с тем же URL-адресом, и это сработало.Это доказывает мне, что вызов не блокируется брандмауэром или чем-то в этом роде.
Итак, я пытаюсь понять это: почему работает Curl из CL, но для этого используется Curl lib?получить на тот же URL, кажется, сломался?Я не думаю, что это ошибка в библиотеке CI Curl, которую я использую, так как я пытался использовать функцию http_response из http://php.net/manual/en/book.curl.php, а также, по-видимому, выдавал ошибку.
Что касается точной ошибки;единственная подсказка, которую я имею к ошибке, состоит в том, что сценарию требуется много времени для сбоя и сброса соединения;так что я думаю, что это может быть тайм-аут.Я поместил следующий код в верхней части моего контроллера, чтобы включить отображение ошибок;но все равно не получено сообщение об ошибке:
error_reporting(E_ALL);
ini_set( 'display_errors','1');
Любой конструктивный вклад приветствуется.
Спасибо, Фрэнк