Внутренняя ошибка сервера 500 simplexml_load_file - PullRequest
1 голос
/ 17 сентября 2009

, если я использую Firefox и получаю доступ http://svcs.ebay.com/services/search/FindingService/v1, я получаю какой-то XML-код, когда я делаю это через PHP, я получаю Internal Server Error 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
$ 

Ответы [ 5 ]

3 голосов
/ 17 сентября 2009

Когда я захожу на http://svcs.ebay.com/services/search/FindingService/v1 в firefox, firebug сообщает, что код ответа HTTP действительно равен 500. (даже если он отправляет некоторый XML в теле запроса)

Вы неправильно набираете номер веб-службы.

Да, вы вернули XML, но код ответа 500, что означает, что ваш URL неверен.

При вызове ximlexml_load_file через упаковщики URL ожидается код успеха.

Тем не менее, вы все равно могли бы получить данные. Может быть.

Но вы должны выяснить, как служба запрашивает у вас запрос.

1 голос
/ 17 сентября 2009

Когда я захожу на этот сайт, я получаю:

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

Таким образом, может показаться, что URL относится к веб-службе и, вероятно, требует какой-либо аутентификации или, по крайней мере, ввода данных в заголовок запроса. HTTP-ответ 500, согласно Википедии, является общей ошибкой, означающей, что сервер не может указать проблему, но знает, что она была. Вот лучшая часть этой статьи:

Коды состояния ответа, начинающиеся с цифра «5» обозначает случаи, когда сервер знает, что у него есть обнаружил ошибку или является другим неспособен выполнить запрос. За исключением случаев ответа на ГОЛОВУ запрос, сервер должен включать в себя сущность, содержащая объяснение ошибка ситуации и указать будь то временный или постоянный состояние.

Все это вместе, я должен сказать, что ваша проблема в том, что вы пытаетесь получить файл с удаленного сервера, используя метод, который предполагает, что у вас есть доступ к этому файлу на уровне каталога, и сервер отвечает «Гм, что?»

Если вы хотите получить фактическую ошибку XML, как если бы вы были в Firefox, используйте 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));

Если вы хотите вернуть что-то более осмысленное, я бы посмотрел на методы PHP 101 * SoapClient и действительную документацию веб-сервиса ebay .

1 голос
/ 17 сентября 2009

Если вы хотите прочитать 500 запросов, используйте 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);
?>
0 голосов
/ 20 сентября 2009

Может быть, вы хотите попробовать следующий URL.Когда я это сделаю, я получу обратно XML и ответ 200.

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

0 голосов
/ 20 сентября 2009

Необходимо установить заголовки http, определяющие операцию, которая должна быть выполнена. Если вы прочитали, как сделать вызов с помощью API поиска , в статье упоминаются следующие http-заголовки, которые необходимо установить:

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

Как только они установлены, ваш звонок будет работать нормально.

...