1

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 警告: simplexml_load_file(http://svcs.ebay.com/services/search/FindingService/v1): ストリームを開くことができませんでした: HTTP 要求が失敗しました! HTTP/1.1 500 内部サーバー エラー
 1行目のコマンドラインコード
PHP スタック トレース:
PHP 1. {main}() コマンド ライン コード:0
PHP 2. simplexml_load_file() コマンド ライン コード:1
PHP 警告: simplexml_load_file(): I/O 警告: 外部エンティティ "http://svcs.ebay.com/services/search/FindingService/v1" を 1 行目のコマンド ライン コードで読み込めませんでした
PHP スタック トレース:
PHP 1. {main}() コマンド ライン コード:0
PHP 2. simplexml_load_file() コマンド ライン コード:1
$
4

6 に答える 6

3

Firefox でhttp://svcs.ebay.com/services/search/FindingService/v1にアクセスすると 、firebug は HTTP 応答コードが実際には 500 であると報告します (要求本文で XML を送信しても)。

間違った方法で Web サービスを呼び出しています。

はい、XML が返されましたが、応答コードは 500 です。これは、URL が間違っていることを意味します。

URL ラッパーを介して ximlexml_load_file を呼び出すと、成功コードが期待されます。

とはいえ、とにかくデータを取得できる可能性があります。多分。

ただし、サービスがどのようにクエリを実行する必要があるかを理解する必要があります。

于 2009-09-17T03:50:36.653 に答える
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 サービスへの URL であり、おそらく何らかの認証が必要であるか、少なくとも要求ヘッダーにデータを入力する必要があるようです。ウィキペディアによると、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 メソッド実際の eBay Web サービスのドキュメントを参照してください。

于 2009-09-17T04:10:57.767 に答える
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);
?>
于 2009-09-17T04:03:23.460 に答える
0

実行する操作を指定して、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

それらが設定されると、通話は正常に機能します。

于 2009-09-19T21:50:16.487 に答える
0

次の URL を試してみてください。すると、XML と 200 応答が返されます。

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

于 2009-09-20T05:28:51.630 に答える