2010-09-14 7 views
8

Ich verwende PHP mit dem Amazon Payments Webservice. Ich habe Probleme mit einigen meiner Anfragen. Amazon gibt einen Fehler zurück, wie es sollte, aber die Art, wie es läuft, gibt mir Probleme.PHP Get Content von HTTP 400 Antwort

Amazon gibt XML-Daten mit einer Nachricht über den Fehler zurück, aber es wirft auch ein HTTP 400 (oder manchmal sogar 404). Dies bewirkt, dass file_get_contents() sofort einen Fehler ausgibt und ich den Inhalt nicht abrufen kann. Ich habe auch versucht, cURL zu benutzen, aber ich bekam nie eine Antwort zurück.

Ich brauche wirklich eine Möglichkeit, um die XML unabhängig von HTTP-Statuscode zurückgegeben. Es enthält ein wichtiges "Nachricht" -Element, das mir Hinweise gibt, warum meine Rechnungsanforderungen fehlschlagen.

Hat jemand ein cURL-Beispiel oder andere, die mir erlauben, dies zu tun? Alle meine Anfragen benutzen file_get_contents(), aber ich bin nicht dagegen, sie zu ändern. Alle anderen scheinen zu denken, dass cURL der "richtige" Weg ist.

Antwort

16

Sie müssen benutzerdefinierten Stream-Kontext (3. Argument der Funktion file_get_contents) mit ignore_errors Option definieren.

+0

Ahh! Es ist so einfach und es funktioniert! Danke für die Hilfe. Ich hätte das herausfinden können, wenn es nicht so dunkel wäre. – jocull

15

Als Follow-up zu Zwiedenken der Post, hier ist ein funktionierendes Beispiel:

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