Pregunta

si uso Firefox y accedo a http://svcs.ebay.com/services / search / FindingService / v1 obtengo algún tipo de XML en respuesta, cuando lo hago a través de PHP obtengo el Error interno del servidor 500

$ php -r 'print_r(simplexml_load_file("http://svcs.ebay.com/services/search/FindingService/v1"));'
PHP Warning:  simplexml_load_file(http://svcs.ebay.com/services/search/FindingService/v1): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error
 in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. simplexml_load_file() Command line code:1
PHP Warning:  simplexml_load_file(): I/O warning : failed to load external entity "http://svcs.ebay.com/services/search/FindingService/v1" in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. simplexml_load_file() Command line code:1
$ 
¿Fue útil?

Solución

Cuando visito http://svcs.ebay.com/services/search/ FindingService / v1 en firefox, firebug informa que el código de respuesta HTTP es de hecho 500. (a pesar de que envía algo de XML en el cuerpo de la solicitud)

Está llamando al servicio web de forma incorrecta.

Sí, recuperó XML, pero el código de respuesta es 500, lo que significa que su URL es incorrecta.

Llamar a ximlexml_load_file a través de contenedores de URL espera un código exitoso.

Dicho esto, probablemente podrías obtener los datos de todos modos. Quizás.

Pero debe averiguar cómo quiere el servicio que consulte.

Otros consejos

Si desea poder leer 500 datos de solicitud, use curl

<?php
// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://svcs.ebay.com/services/search/FindingService/v1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// grab URL and pass it to the browser
$xml = curl_exec($ch);
$simpleXml = simplexml_load_string($xml);
// close cURL resource, and free up system resources
curl_close($ch);
?>

Cuando voy a ese sitio, obtengo:

<ms:errorMessage>
−
<error>
<errorId>2038</errorId>
<domain>SOA</domain>
<severity>Error</severity>
<category>System</category>
<message>Missing SOA operation name header</message>
</error>
</ms:errorMessage>

Parece que la URL es para un servicio web y probablemente requiere algún tipo de autenticación o al menos datos de entrada en el encabezado de la solicitud. La respuesta HTTP 500, según Wikipedia, es un error genérico que significa que el servidor no puede especificar el problema pero sabe que hubo uno. Aquí está la mejor parte de ese artículo:

  

Códigos de estado de respuesta que comienzan con   el dígito "5" indicar casos en los que   el servidor es consciente de que tiene   encontró un error o es de otra manera   incapaz de realizar la solicitud.   Excepto cuando responde a una CABEZA   solicitud, el servidor debe incluir un   entidad que contiene una explicación de   la situación de error e indicar   ya sea temporal o permanente   condición.

Todo eso combinado, debo decir que su problema es que está tratando de tomar un archivo de un servidor remoto utilizando un método que asume que tiene algún acceso de nivel de directorio a ese archivo, y el servidor está respondiendo con " Um, ¿qué? "

Si desea obtener el error XML real como si estuviera en Firefox, use cURL:

$ebay_url = "http://svcs.ebay.com/services/search/FindingService/v1";
$ebay_page = curl_init();

curl_setopt($ebay_page, CURLOPT_RETURNTRANSFER, true); //output to string.
curl_setopt($ebay_page, CURLOPT_URL, $ebay_url); //set the url for the request.

$ebay_response = curl_exec($ebay_page);

print_r(simplexml_load_string($ebay_response));

Si realmente desea recuperar algo más significativo, miraría Métodos SoapClient y la documentación real del servicio web de eBay .

Los encabezados http deben establecerse especificando la operación que se ejecutará. Si lee cómo realice una llamada utilizando la API de búsqueda , el El artículo menciona los siguientes encabezados http que deben establecerse:

X-EBAY-SOA-SERVICE-NAME: FindingService
X-EBAY-SOA-OPERATION-NAME: findItemsAdvanced <-- whatever call you are making
X-EBAY-SOA-SERVICE-VERSION: 1.0.0
X-EBAY-SOA-GLOBAL-ID: EBAY-US
X-EBAY-SOA-SECURITY-APPNAME: MyAppID
X-EBAY-SOA-REQUEST-DATA-FORMAT: XML
X-EBAY-SOA-MESSAGE-PROTOCOL: XML

Una vez configurados, su llamada debería funcionar bien.

Quizás desee probar la siguiente URL. Cuando lo hago, recupero el XML y una respuesta 200.

http://svcs.ebay.com/services/search/FindingService/v1?wsdl

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top