Неопределенный индекс (HTTP USER AGENT) для file_get_contents

В настоящее время я пытаюсь сделать запрос к системе API (возвращение в виде XML), и все работает нормально, когда я использую file_get_contents с URL:

http://bcoddsfeed.goldenpalace.be/getXML.php

Однако после того, как я найду идентификатор игры и добавлю? Gameid =Я БЫ на URL я получаю очень странную ошибку (которая, по-видимому, не позволяет мне превратить его в многоуровневый массив с помощью json_encode и json_decode).
Пример URL, который не работает:

http://bcoddsfeed.goldenpalace.be/getXML.php?gameid=1130733827

Когда я использую var_dump для полученных данных, я возвращаю их в несколько искаженном формате со следующей ошибкой HTTP_USER_AGENT в начале, которая все портит.

Notice: Undefined index: HTTP_USER_AGENT in /usr/local/www/bcoddsfeed.goldenpalace.be/getXML.php on line 29

Полный вывод выглядит примерно так:

string(6502) "Notice: Undefined index: HTTP_USER_AGENT in /usr/local/www/bcoddsfeed.goldenpalace.be/getXML.php on line 29
2015-01-18 10:00:00Match ResultW24.6W11.81X3.2<_1X12X2>Double Chance1X1.13121.27X21.88Total Goals: Over/UnderTotal Goals Under | 5.51.01Total Goals Over | 5.511Total Goals: Over/UnderTotal Goals Under | 3.51.15Total Goals Over | 3.54.5Total Goals: Over/UnderTotal Goals Under | 14.95Total Goals Over | 11.12Total Goals: Over/UnderTotal Goals Under | 31.22Total Goals Over | 33.75Total Goals: Over/UnderTotal Goals Over | 21.82Total Goals Under | 21.88Total Goals: Over/UnderTotal Goals Under | 0.56.75Total Goals Over | 0.51.07Total Goals: Over/UnderTotal Goals Over | 4.510Total Goals: Over/UnderTotal Goals Under | 41.05Total Goals Over | 47.5Total Goals: Over/UnderTotal Goals Over | 1.51.45Total Goals Under | 1.52.5Total Goals: Over/UnderTotal Goals Under | 2.51.5Total Goals Over | 2.52.4Goals of Team 2Goals of Team 2 Over | 2.511Goals of Team 2 Under | 2.51.01Goals of Team 1Goals of Team 1 Under | 21.25Goals of Team 1 Over | 23.5Goals of Team 2Goals of Team 2 Over | 12.85Goals of Team 2 Under | 11.35Goals of Team 2Goals of Team 2 Over | 1.54.5Goals of Team 2 Under | 1.51.15Goals of Team 1Goals of Team 1 Under | 1.51.6Goals of Team 1 Over | 1.52.15Goals of Team 1Goals of Team 1 Over | 11.45Goals of Team 1 Under | 12.5Goals of Team 1Goals of Team 1 Under | 2.51.15Goals of Team 1 Over | 2.54.5Asian HandicapAsian Handicap 2 | 2.51.05Asian Handicap 1 | -2.57.5Asian HandicapAsian Handicap 2 | 1.51.27Asian Handicap 1 | -1.53.3Asian HandicapAsian Handicap 1 | -25.5Asian Handicap 2 | 21.1Asian HandicapAsian Handicap 2 | 11.45Asian Handicap 1 | -12.5Asian HandicapAsian Handicap 2 | 03.05Asian Handicap 1 | 01.32Correct Score2:07.41:05.20:2231:2161:41602:41806:02105:1955:21902:193:014.53:118.53:2420:071:16.42:2210:19.46:1211:3500:3653:31002:3604:1404:0344:31804:2900:41804:42303:42705:075"

У кого-нибудь есть идеи, как исправить эту ошибку HTTP_USER_AGENT и получить красивую чистую строку XML, которую я могу преобразовать в .json для использования в моем приложении php? Я очень неопытен с этим, и любая помощь будет принята с благодарностью, так как я полностью потерян.

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

Спасибо!

Я также попытался использовать функцию curl ниже для вызова данных через URL, но не повезло. Я все еще получаю ту же ошибку.

CURL ФУНКЦИЯ

    public static function get_data($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

-2

Решение

Похоже, этот «API» просто плохо написан. Он ожидает, что каждый сделанный запрос включает User-Agent заголовок запроса — и не учитывает, что не каждый клиент может отправить его. (Ваш браузер обычно это делает, поэтому вы не видите эту ошибку при посещении этого URL в вашем браузере, но ваш PHP-скрипт, по-видимому, этого не делает.)

Теперь этот API просто пытается получить доступ к этому значению, не проверяя, действительно ли оно существует; так как кажется, что написано на PHP, скорее всего через $_SERVER['HTTP_USER_AGENT'] — и если клиент не отправил такой заголовок, он генерирует уведомление PHP о неопределенном индексе.

На самом деле фиксировать это была бы работа любого, кто сделал бы этот API вместе. Если они потребность заголовок User-Agent для отправки вместе с запросом, тогда их скрипт должен проверять задано ли такое значение, и «изящно», если оно не установлено, т.е. возвращая какое-то сообщение об ошибке в виде XML.

В качестве обходного пути вы можете сделать file_get_contents Отправить User-Agent Заголовок в вашем скрипте.
Установка значения для user_agent значение конфигурации во время выполнения, используя ini_set должно хватить. Нужно ли вам отправить конкретный User-Agent (такой же, как обычный браузер), или, если достаточно просто какого-либо значения, попробуйте и посмотрите. Скорее всего подойдет любая ценность.

Если это не сработает, или вам нужно отправить какие-либо дополнительные заголовки, пожалуйста, обратитесь к такому вопросу SO: PHP file_get_contents () и заголовки


Изменить: Конечно, используя cURL, вы столкнулись с той же проблемой, если только вы не указали User-Agent, чтобы этот API не работал. Вы можете сделать это с помощью curl_setopt и CURLOPT_USERAGENT вариант.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]