2

これは eBay 固有の問題というよりはむしろ一般的な問題だと思いますが、よくわかりません: XML 要求を eBay 開発者 API に送信して、XML 応答を取得しようとしています。curl を使用すると、すべてが正常に動作し、不足している API キーを示す XML 応答が返されます (HTTP ヘッダーを介してそれらを提供すると、有効な XML 結果が得られます)。

curl -d '<!xml version="1.0" encoding="utf-8"?><findItemsByKeywordsRequest xmlns="http://www.ebay.com/marketplace/search/v1/services"><keywords>harry potter phoenix</keywords></findItemsByKeywordsRequest>' \
http://svcs.sandbox.ebay.com/services/search/FindingService/v1

これにより、正しい応答が得られます。

<?xml version='1.0' encoding='UTF-8'?>
<ms:errorMessage xmlns:ms="http://www.ebay.com/marketplace/services" xmlns="http://www.ebay.com/marketplace/search/v1/services">
    <error>
        <errorId>2038</errorId>
        <domain>CoreRuntime</domain>
        <severity>Error</severity>
        <category>System</category>
        <message>Missing SOA operation name header</message>
        <subdomain>System</subdomain>
    </error>
</ms:errorMessage>

しかし、Python を使用しようとすると、例をどんなに基本的に作成しても、「500 内部サーバー エラー」が発生します。私は2つの非常に基本的な方法を試しました:

一番:

serverUrl = 'svcs.sandbox.ebay.com'
xmlparameters = '<!xml version="1.0" encoding="utf-8"?><findItemsByKeywordsRequest xmlns="http://www.ebay.com/marketplace/search/v1/services"><keywords>harry potter phoenix</keywords></findItemsByKeywordsRequest>'

webservice = httplib.HTTP(serverUrl)
webservice.putrequest("POST", "/services/search/FindingService/v1")
webservice.putheader("Host", serverUrl)
webservice.putheader("Content-type", "text/xml; charset=\"UTF-8\"")
webservice.putheader("Content-length", "%d" % len(xmlparameters))
webservice.endheaders()
webservice.send(xmlparameters)

2番目(これは私の好みの方法です):

serverUrl = 'svcs.sandbox.ebay.com'
xmlparameters = '<!xml version="1.0" encoding="utf-8"?><findItemsByKeywordsRequest xmlns="http://www.ebay.com/marketplace/search/v1/services"><keywords>harry potter phoenix</keywords></findItemsByKeywordsRequest>'

connection = httplib.HTTPConnection(serverUrl)
connection.request("POST", '/services/search/FindingService/v1', xmlparameters)

CURL の例でわかるように、API キーなどを送信しなくてもかまいません。とにかく、HTTP ステータス コード「500 内部サーバー エラー」だけでなく、XML エラー応答を返す必要があります。

POSTリクエストで私が間違っていることを誰かが見ていますか?

[編集] ところで、URL ValueName API を使用すると Python で完全に機能しますが、それは URL に対する単なる GET 要求です。それでも、私は XML API を使用したいと思います。ただし、それが不可能な場合は、もちろん ValueName URI に切り替えます。

4

2 に答える 2

1

500 ステータスと xml レスポンスを返します。

>>> connection.request("POST", '/services/search/FindingService/v1', xmlparameters)
>>> resp = connection.getresponse()
>>> resp.status
<<< 500
>>> resp.read()
<<< '<?xml version=\'1.0\' encoding=\'UTF-8\'?><ms:errorMessage xmlns:ms="http://www.ebay.com/marketplace/services" xmlns="http://www.ebay.com/marketplace/search/v1/services"><error><errorId>2038</errorId><domain>CoreRuntime</domain><severity>Error</severity><category>System</category><message>Missing SOA operation name header</message><subdomain>System</subdomain></error></ms:errorMessage>'
于 2011-05-06T18:40:22.710 に答える
0

500 応答ステータスはどちらかというと一般的なものであり、サーバーでスローされたエラーに関係なく戻ってくるはずです。CGI トラックバックを使用してエラー メッセージを返すことを検討していただけますか?

http://docs.python.org/library/cgitb.html#module-cgitb

于 2011-05-06T17:51:10.340 に答える