2010-09-14 11 views
8

Estoy usando PHP con el servicio web de Amazon Payments. Tengo problemas con algunas de mis solicitudes. Amazon está devolviendo un error como debería, sin embargo, la forma en que ocurre me está dando problemas.PHP Obtenga el contenido de HTTP 400 Response

Amazon devuelve datos XML con un mensaje sobre el error, pero también arroja un HTTP 400 (o incluso 404 a veces). Esto hace que file_get_contents() arroje un error de inmediato y no tengo forma de obtener el contenido. También traté de usar cURL, pero nunca lo obtuve para devolverme una respuesta.

Realmente necesito una forma de obtener el XML devuelto independientemente del código de estado HTTP. Tiene un elemento importante de "mensaje" que me da pistas sobre por qué mis solicitudes de facturación están fallando.

¿Alguien tiene un ejemplo de cURL o de otro modo que me permita hacer esto? Todas mis solicitudes actualmente usan file_get_contents() pero no me opongo a cambiarlas. Todos los demás parecen pensar que el CURL es el camino "correcto".

Respuesta

16

Tiene que definir el contexto de flujo personalizado (tercer argumento de la función file_get_contents) con la opción ignore_errors activada.

+0

Ahh! ¡Es tan simple y funciona! Gracias por la ayuda. Podría haber descubierto esto si no fuera tan oscuro. – jocull

15

Como seguimiento al post de doble pensamiento, aquí es un ejemplo de trabajo:

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