内部服务器错误500使用simplexml_load_file(Internal Serve

2019-10-17 14:29发布

如果我使用Firefox和访问http://svcs.ebay.com/services/search/FindingService/v1我得到某种在respose XML的,当我做到这一点通过PHP我得到的内部服务器错误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
$ 

Answer 1:

当我访问http://svcs.ebay.com/services/search/FindingService/v1在Firefox中,萤火报告说,HTTP效应初探代码确实是500(即使它发送一些XML请求体)

你打电话的方式是错误的web服务。

是的,你得到了对XML的支持,但响应代码是500,这意味着你的URL是错误的。

通过URL封装调用ximlexml_load_file预计成功代码。

这就是说,你可以在数据可能得到反正。 也许。

但是,你应该弄清楚如何服务要你查询。



Answer 2:

如果您希望能够读取500请求数据使用卷曲

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


Answer 3:

当我去那个网站,我得到:

<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是一个Web服务,可能需要某种在请求头至少输入数据的验证或。 HTTP响应500,根据维基百科,是一般性错误意味着服务器不能指定问题,但知道有一个。 下面是文章的最好的部分:

与数字开头响应状态码“5”表示,其中服务器是意识到它遇到了一个错误,或者是其他方式无法执行请求的情况下。 响应HEAD请求时除外,服务器应包括含有有关错误情况的解释的实体,并指示其是否是临时或永久的条件。

所有这一切结合起来,我不得不说,你的问题是,你正试图从使用假设你有到该文件中的一些目录级访问的方法远程服务器获取文件,服务器与“嗯响应,什么?”

如果你想,就好像你在Firefox中获得实际的XML错误,使用卷曲:

$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的SoapClient的方法和实际易趣网络服务文档 。



Answer 4:

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

一旦这些被设置的呼叫768,16做工精细。



Answer 5:

也许你想试试下面的网址。 当我这样做,我回来了XML和200响应。

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



Answer 6:

你需要重新安装你的PHP(假设你已经安装的Apache2)。 使用以下命令:

1) sudo apt update && apt upgrade

2) sudo apt install php-pear php-fpm php-dev php-zip php-curl php-xmlrpc php-gd php-mysql php-mbstring php-xml libapache2-mod-php

3) sudo service apache2 restart



文章来源: Internal Server Error 500 simplexml_load_file
标签: php simplexml