Я заметил, что был вопрос, похожий на мой, только с текстом c #: link . Позвольте мне объяснить: я очень новичок во всей реализации веб-сервисов, поэтому я испытываю трудности с пониманием (особенно из-за неопределенного руководства API MediaWiki).
Я хочу получить всю страницу в виде строки в PHP (файл XML), а затем обработать ее в PHP (я уверен, что есть другие более сложные способы анализа XML-файлов, но что угодно): Главная страница wikipedia .
Я пробовал делать $fp = fopen($url,'r');
, Он выводит: HTTP request failed! HTTP/1.0 400 Bad Request
HTTP request failed! HTTP/1.0 400 Bad Request
. API не требует подключения к нему ключа.
Можете ли вы подробно описать, как подключиться к API и получить страницу в виде строки?
EDIT: URL-адрес: $url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main Page';
, Я просто хочу прочитать весь контент файла в строке, чтобы использовать его.
Подключение к этому API так же просто, как извлечение файла,
Еореп
$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page'; $fp = fopen($url, 'r'); while (!feof($fp)) { $c .= fread($fp, 8192); } echo $c;
file_get_contents
$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page'; $c = file_get_contents($url); echo $c;
Вышеуказанные два могут использоваться только в том случае, если на вашем сервере установлены обертки fopen
.
В противном случае, если ваш сервер имеет cURL, вы можете использовать его,
$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page'; $ch = curl_init($url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $c = curl_exec($ch); echo $c;
Вероятно, вам нужно указать urlencode параметры, которые вы передаете в строке запроса; здесь, по крайней мере, « Main Page
» требует кодирования – без этой кодировки я также получаю ошибку 400 .
Если вы попробуете это, он должен работать лучше (обратите внимание, что место заменено на %20
) :
$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page'; $str = file_get_contents($url); var_dump($str);
При этом я получаю содержимое страницы.
Решением является использование urlencode
, поэтому вам не нужно кодировать себя:
$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=' . urlencode('Main Page'); $str = file_get_contents($url); var_dump($str);
Согласно документам API MediaWiki API, если вы не укажете User-Agent в запросе PHP, WikiMedia откажется от соединения с кодом ответа HTTP 4xx:
https://www.mediawiki.org/wiki/API:Main_page#Identifying_your_client
Вы можете попробовать обновить свой код, чтобы добавить этот заголовок запроса, или изменить настройку по умолчанию в php.ini, если у вас есть доступ к редактированию.