PHP и Curl не работают для определенного URL - PullRequest
3 голосов
/ 18 февраля 2012

У меня есть 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');

Любой конструктивный вклад приветствуется.

Спасибо, Фрэнк

Ответы [ 2 ]

0 голосов
/ 18 декабря 2012

Вы можете попробовать использовать Postman, чтобы увидеть, что на самом деле происходит с «разговором».Это REST-клиент для Chrome - https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm

Я несколько раз ударил себя по REST API, и это помогло выяснить, что происходит ...

0 голосов
/ 08 марта 2012

FYI,

Никогда не понимал, почему URL Facebook работал, а Twitter - нет. Мы решили обойти эту проблему, используя обработчик onShare кнопки Tweet для вызова службы AJAX, которая вручную увеличивает счетчик ресурсов; поэтому нет необходимости получать счетчик акций напрямую из Twitter. Это не идеальное решение (оно не будет отслеживать ретвиты); но этого достаточно для наших нужд.

Спасибо, ребята, в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...