2010-09-14 15 views
8

J'utilise PHP avec le service Web Amazon Payments. J'ai des problèmes avec certaines de mes demandes. Amazon renvoie une erreur comme il se doit, mais la façon dont cela se passe me cause des problèmes.PHP Obtenir le contenu de la réponse HTTP 400

Amazon renvoie des données XML avec un message sur l'erreur, mais il lance également un HTTP 400 (ou même parfois 404). Cela fait file_get_contents() jeter une erreur tout de suite et je n'ai aucun moyen d'obtenir le contenu. J'ai aussi essayé d'utiliser cURL, mais je n'ai jamais eu le temps de me répondre.

J'ai vraiment besoin d'un moyen d'obtenir le XML renvoyé quel que soit le code d'état HTTP. Il a un élément important "message" qui me donne des indices sur la raison pour laquelle mes demandes de facturation échouent.

Est-ce que quelqu'un a un exemple cURL ou autre qui me permettra de faire cela? Toutes mes demandes utilisent actuellement file_get_contents() mais je ne suis pas opposé à les changer. Tout le monde semble penser que cURL est la "bonne" façon.

Répondre

16

Vous devez définir un contexte de flux personnalisé (3ème argument de la fonction file_get_contents) avec l'option ignore_errors activée.

+0

Ahh! C'est si simple et ça marche! Merci pour l'aide. J'aurais pu comprendre cela si ce n'était pas si obscur. – jocull

15

En tant que suivi au poste de Doublethink, voici un exemple de travail:

$url = 'http://whatever.com'; 

//Set stream options 
$opts = array(
    'http' => array('ignore_errors' => true) 
); 

//Create the stream context 
$context = stream_context_create($opts); 

//Open the file using the defined context 
$file = file_get_contents($url, false, $context);