PHP Curl возвращает несогласованные данные для подачи XML - PullRequest
4 голосов
/ 22 апреля 2011

Я работаю над XML-ридером и сталкиваюсь с странной проблемой с несколькими фидами.При использовании CURL или даже file_get_contents каналы загружаются как двоичные данные чаще, чем реальные данные.Всякий раз, когда я загружаю фид в браузере, он выглядит нормально.

Конкретный фид - http://www.winnipegsun.com/home/rss.xml

Код, который я использую -

$string = file_get_contents("http://www.winnipegsun.com/home/rss.xml");
var_dump( $string );

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Ответ gzipped:

Если вы посмотрите на заголовки HTTP: Content-Encoding: gzip

Распакуйте его с PHP:

gzinflate(substr($string, 10));

http://php.net/manual/en/function.gzinflate.php

Надеюсь, это поможет ... ура

0 голосов
/ 22 апреля 2011

Вы должны иметь возможность отправить пустой заголовок Accept-Encoding на сервер, а затем он не должен отправлять содержимое в сжатом виде или возвращать Not Acceptable ответ:

$string = file_get_contents(
    "http://www.winnipegsun.com/home/rss.xml",
    FALSE,
    stream_context_create(
        array(
            'http' => array(
                'method'  => "GET",
                'headers' => 'Accept-Encoding:\r\n'
            )
        )
    )
);
var_dump($string);

Я не уверен, что веб-сервер настроен правильно, потому что он не будет отвечать на него с помощью несжатого фида, даже когда добавляются заголовки Cache Control, которые говорят ему, что он не отправляет кэшированный ответ.Как ни странно, просто делать

$string = file_get_contents("http://www.winnipegsun.com/home/rss.xml?".time());

сработало из коробки.И вы также можете отправить запрос POST.

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