file_get_contents上的未定义索引(HTTP USER AGENT)

时间:2015-01-18 00:56:22

标签: php file-get-contents user-agent

我目前正在尝试查询API系统(返回为XML),当我使用带有URL的file_get_contents时,一切正常:

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

然而,在我找到游戏ID并向URL添加?gameid = ID 后,我得到一个非常奇怪的错误(这似乎阻止我通过手段将其转换为多级数组of 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 FUNCTION

    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;
}

1 个答案:

答案 0 :(得分:1)

看起来这个“API”写得不好。它期望每个请求都包含一个User-Agent请求标头 - 并且没有考虑到并非每个客户端都可以发送一个请求标头。 (您的浏览器通常会这样做,这就是您在浏览器中访问该URL时没有遇到该错误的原因,但您的PHP脚本显然没有。)

现在这个API只是试图访问这个值而不检查它是否确实存在;因为它似乎是用PHP编写的,很可能是通过$_SERVER['HTTP_USER_AGENT']编写的 - 如果客户端没有发送这样的标题,它会生成关于未定义索引的PHP通知。

实际上修复这将是将这个API拼凑在一起的人的工作。如果他们要求要与发送请求一起发送User-Agent标头,那么他们的脚本应该检查是否设置了这样的值,并且如果它不是“优雅地”则失败t,fe通过将某种错误消息作为XML返回。

作为一种变通方法,您可以在脚本中file_get_contents发送User-Agent标题 使用ini_set在运行时设置user_agent配置值的值应该足够了。您是否需要发送特定的用户代理(一个像普通浏览器一样发送),或者只要任何值足够,您必须尝试查看。很可能任何价值都可以。

如果这不起作用,或者您需要发送任何其他标题,请参阅此SO问题:PHP file_get_contents() and headers


编辑:使用cURL当然会遇到同样的问题,除非您指定User-Agent以使此API不会失败。您可以使用curl_setoptCURLOPT_USERAGENT选项执行此操作。