DOMDocument在页面上加载,返回400 Bad Request状态

时间:2010-04-10 23:01:21

标签: php xml api domdocument last.fm

我正在尝试将Last.fm API用于我正在创建的应用程序,但是在验证时遇到了一些问题。

如果API请求发出错误,它会在响应XML中返回代码和消息,如下所示:

<lfm status="failed">
<error code="6">No user with that name</error>
</lfm>

但是,请求还返回HTTP状态400(或在某些情况下为403),DOMDocument认为这是错误,因此拒绝解析XML。

有没有办法解决这个问题,以便我可以检索错误代码和消息?

由于

皮特

4 个答案:

答案 0 :(得分:1)

解决方案可能是分两步操作:

  • 首先,使用curl获取XML字符串,例如
  • 然后,使用DOMDocument处理该字符串。


有一个例子说明如何在curl_exec手册页上使用curl;添加一些有用的选项,你可以使用这样的东西,我想:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "YUR_URL_HERE");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_string = curl_exec($ch);
curl_close($ch);

// You can now work with $xml_string

并且,对于更多选项(其中有很多^^),您可以查看curl_setopt的手册页。

答案 1 :(得分:1)

我使用try&amp; amp;解决了这个问题。抓住。如果它可以帮助某人

    function getXML($xml) {
            $dom = new DomDocument();
        try {
            @$dom->load($xml); // The '@' is necessary to hide error if it's a error 400 - Bad Request
            $root = $dom->documentElement;
            return $root;
        }
        catch(Exception $e)
        {
            return false;
        }
    }

答案 2 :(得分:0)

您始终可以使用file_get_contents之类的其他功能获取响应,然后使用DOMDocument::loadXML

解析XML

编辑:

http://www.php.net/manual/en/domdocument.load.php#91384

答案 3 :(得分:0)

功能:

function getAlbum($xml,$artist,$album)
{
  $base_url = $xml;
  $options = array_merge(array(
    'user' => 'YOUR_USERNAME',
    'artist'=>$artist,
    'album'=>$album,
    'period' => NULL,
    'api_key' => 'xYxOxUxRxxAxPxIxxKxExYxx', 
  ));

  $options['method'] = 'album.getinfo';

  // Initialize cURL request and set parameters
  $ch = curl_init($base_url);
  curl_setopt_array($ch, array(
    CURLOPT_URL            => 'http://ws.audioscrobbler.com/2.0/',
    CURLOPT_POST           => TRUE,
    CURLOPT_POSTFIELDS     => $options,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_HTTPHEADER        => array( 'Expect:' ) ,
    CURLOPT_USERAGENT      => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
  ));

  $results = curl_exec($ch);
  unset ($options);
  return $results;
}

用法:

// Get the XML
$xml_error = getAlbum($xml,$artist,$album);

// Show XML error
if (preg_match("/error/i", $xml_error)) {
    echo " <strong>ERRO:</strong> ".trim(strip_tags($xml_error));
}