У меня проблема с использованием API Википедии.Я использую этот PHP-скрипт,
<?php $xmlDoc = new DOMDocument(); $xmlDoc->load("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=content&format=xml"); print $xmlDoc->saveXML(); ?>
, и у меня в браузере следующий результат.Почему?
Предупреждение: DOMDocument :: load (http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=content&format=xml) [domdocument.load]: не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.0 403 Запрещено в D: \ Program Files \ VertrigoServ \www \ wiki \ index.php в строке 3 Предупреждение: DOMDocument :: load () [domdocument.load]: предупреждение ввода-вывода: не удалось загрузить внешнюю сущность "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=content&format=xml" в D: \ Program Files\ VertrigoServ \ www \ wiki \ index.php в строке 3
Предупреждение: DOMDocument :: load (http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=content&format=xml) [domdocument.load]: не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.0 403 Запрещено в D: \ Program Files \ VertrigoServ \www \ wiki \ index.php в строке 3
Предупреждение: DOMDocument :: load () [domdocument.load]: предупреждение ввода-вывода: не удалось загрузить внешнюю сущность "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=content&format=xml" в D: \ Program Files\ VertrigoServ \ www \ wiki \ index.php в строке 3
Для политики агента пользователя MediaWiki: http://meta.wikimedia.org/wiki/User-Agent_policy
<?php $vars = array( 'http' => array( 'user_agent' =>'whatever')); $context = stream_context_create($vars); libxml_set_streams_context($context); $xmlDoc = new DOMDocument(); $xmlDoc->load("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=content&format=xml"); print $xmlDoc->saveXML(); ?>
Не спрашивайте, почему требуется пользовательский агент, но я вижу все больше и больше таких же вопросов здесь, в SO, которые можно исправить, предоставив User-Agent.
редактирование: Следующее также будет работать (это здесь):
<?php ini_set('user_agent','whatever'); $xmlDoc = new DOMDocument(); $xmlDoc->load("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=content&format=xml"); print $xmlDoc->saveXML(); ?>
Возможно, настройка PHP по умолчанию для этого user_agent была изменена?
user_agent