mohamad bagheri mohamad bagheri - 4 months ago 18
PHP Question

DOMDocument - Load xml rss - failed to open stream

I want to get links from a rss url . This is my code :

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


I've used this code for several others URLs and all of them worked but on this one I get:


Warning:

DOMDocument::load(http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml): failed to open stream: HTTP request failed!

HTTP/1.1 403 Forbidden in /home/xxxxxxx/domains/xxxxxxx/public_html/data.php on line 14

Warning:

DOMDocument::load(): I/O warning: failed to load external entity "http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml"

in /home/xxxxxxx/domains/xxxxxxx/public_html/data.php on line 14

http://www.alef.ir/rssdx.gmyefy,ggeltshmci.62ay2x.y.xml


Line 14 is:

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


Could you help me? Why does this request give me an error?

Thanks

Answer

Using the code above failed for me and it was not due to the comma as I commented. I found that, using curl, I was able to retrieve the xml file.

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

}