如果我使用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 $
答案 0 :(得分:3)
当我在firefox中访问http://svcs.ebay.com/services/search/FindingService/v1时,firebug报告HTTP响应代码确实是500.(即使它在请求正文中发送了一些XML)
您正在以错误的方式调用Web服务。
是的,你得到了XML,但响应代码是500,这意味着你的网址是错误的。
通过url包装器调用ximlexml_load_file需要成功代码。
那就是说,无论如何你都可以获得数据。也许
但是你应该弄清楚服务希望你如何查询。
答案 1 :(得分:1)
如果您希望能够阅读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);
?>
答案 2 :(得分:1)
当我去那个网站时,我得到了:
<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错误,请使用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的SoapClient methods和actual ebay web service documentation。
答案 3 :(得分:0)
需要设置http标头,指定要执行的操作。如果您阅读make a call using the finding 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
一旦确定了这些,你的电话就可以了。
答案 4 :(得分:0)
也许您想尝试以下网址。当我这样做时,我得到了XML和200响应。
http://svcs.ebay.com/services/search/FindingService/v1?wsdl
答案 5 :(得分:0)
您需要重新安装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