Как я могу загрузить с помощью PHP XML-файл, перенаправленный каким-то странным способом?

Файл, который я пытаюсь загрузить с моего PHP-скрипта, следующий:

http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml 

Но я не могу это сделать, используя ни file_get_contents() ни cURL . Я получаю ошибку Object reference not set to an instance of an object.

Есть идеи, как это сделать?

Большое спасибо, Пабло.

Обновлен для добавления кода:

 $url = "http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml"; $simple = simplexml_load_file(file_get_contents($url)); foreach ($simple->farmacia as $farmacia) { var_dump($farmacia); } 

И решение благодаря @Gordon:

 $url = "http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml"; $file = file_get_contents($url, FALSE, stream_context_create(array('http' => array('user_agent' => 'php' )))); $simple = simplexml_load_string($file); 

Вам не нужны cURL или file_get_contents для загрузки XML в любой из парсеров XML на основе DOM .

Однако в вашем конкретном случае проблема заключается в том, что сервер ожидает пользовательского агента в HTTP-запросе. Если пользовательский агент не установлен в вашем php.ini, вы можете использовать функции libxml и предоставить его как контекст потока :

 libxml_set_streams_context( stream_context_create( array( 'http' => array( 'user_agent' => 'php' ) ) ) ); $dom = new DOMDocument; $dom->load('http://www.navarra.es/app…/Farmacias.xml'); echo $dom->saveXml(); 

Демо-версия

Если после этого вы не захотите анализировать XML-файл, вы также можете использовать file_get_contents . Вы можете передать контекст потока в качестве третьего аргумента:

 echo file_get_contents( 'http://www.navarra.es/apps…/Farmacias.xml', FALSE, stream_context_create( array( 'http' => array( 'user_agent' => 'php' ) ) ) ); 

Демо-версия

Я использовал решение, данное для @Gordon, и он отлично работал в localhost:

 $url = "http://www.navarra.es/appsext/DescargarFichero/default.aspx?codigoAcceso=OpenData&fichero=Farmacias/Farmacias.xml"; $file = file_get_contents($url, FALSE, stream_context_create(array('http' =>array('user_agent' => 'php' )))); $simple = simplexml_load_string($file); 

Но когда я загрузил все файлы на сервер … неожиданно, как всегда. Я начал получать URL-адрес доступа к URL-адресу ошибки в конфигурации сервера, поэтому я изменил все file_get_contents() для этого кода, который я нашел здесь :

 function get_content($url) { $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, "Googlebot/2.1..."); ob_start(); curl_exec ($ch); curl_close ($ch); $string = ob_get_contents(); ob_end_clean(); return $string; } 

Считаете ли вы, что это хороший подход?

Спасибо, Пабло.