2015-04-27 1 views
0

Я хочу получить ссылки с rss-url. Это мой код:DOMDocument - Загрузить xml rss - не удалось открыть поток

$doc = new DOMDocument(); 
$doc->load("http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml"); 
$arrFeeds = array(); 
foreach ($doc->getElementsByTagName('item') as $node) { 

    $title = $node->getElementsByTagName('title')->item(0)->nodeValue; 
    $title=strip_tags($title); 
    $link=$node->getElementsByTagName('link')->item(0)->nodeValue; 
} 

Я использовал этот код для нескольких других URL-адресов, и все они работали, но на этом я получаю:

Предупреждение:
DOMDocument :: нагрузки (http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml): не удалось открыть поток: HTTP-запрос не удался!
HTTP/1.1 403 Forbidden в /home/xxxxxxx/domains/xxxxxxx/public_html/data.php на линии 14
Предупреждение:
DOMDocument :: нагрузки() I/O Предупреждение: Не удалось загрузить внешний объект "http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml"
в /home/xxxxxxx/domains/xxxxxxx/public_html/data.php на линии 14
http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml

Line 14 является:

$doc->load("http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml"); 

Не могли бы вы мне помочь? Почему этот запрос дает мне ошибку?

Благодаря

+0

У этого URL-адреса имеется запятая - может быть, это ошибка? – RamRaider

ответ

1

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

$c=curl_init('http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml'); 
curl_setopt($c, CURLOPT_USERAGENT,'nginx-curl-blahblahblah'); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
$r=curl_exec($c); 
curl_close($c); 

$doc = new DOMDocument(); 
$doc->loadxml($r); 
$arrFeeds = array(); 

foreach ($doc->getElementsByTagName('item') as $node) { 

    $title=$node->getElementsByTagName('title')->item(0)->nodeValue; 
    $title=strip_tags($title); 
    $link=$node->getElementsByTagName('link')->item(0)->nodeValue; 

} 
0

Добавить этот код перед тем, как называть свой канал, это изменит агент пользователя.

$opts = array(
    'http' => array(
     'user_agent' => 'PHP libxml agent', 
    ) 
); 

$context = stream_context_create($opts); 
libxml_set_streams_context($context);