400 Bad Request durumunu dönen bir sayfada DOMDocument yük

4 Cevap php

Ben yaratıyorum bir uygulama için Last.fm API kullanmaya çalışıyorum, ancak doğrulama ile bazı sorunlar yaşıyorum.

API isteği bu gibi yanıt XML bir kodu ve iletisi döndürür bir hata verirse:

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

Ancak, talep de 400 HTTP durumunu döndürür (veya bazı durumlarda 403) DOMDocument bir hata olarak gördüğünü ve bu yüzden daha sonra XML Ayrıştırma reddediyor hangi.

Ben hata kodu ve iletisi almak böylece bu yuvarlak herhangi bir yolu var mı?

Teşekkürler

Pete

4 Cevap

Bir çözüm, iki adımda manipülasyonlar ayırmak için olabilir:


There is an example of how you can use curl on the
curl_exec manual page ; adding a few useful options, you could use something like this, I suppose :

$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

Ve, daha fazla seçenek için (there are a lot of them ^^ ), size kılavuz sayfasına bir göz atabilirsiniz curl_setopt .

Ben denemek kullanarak tarafından sorunu çözüldü yakalamak. Birine yardımcı olabilir

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

Her zaman file_get_contents gibi bazı diğer işlevi ile yanıt almak ve ardından DOMDocument::loadXML ile XML ayrıştırmak

Edit:

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

Fonksiyonu:

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

Kullanımı:

// 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));
}