gpt4 book ai didi

python - 如何通过 Python 向 eBay API 发送有效的 XML POST 请求?

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:55 24 4
gpt4 key购买 nike

我想这是一个普遍问题,而不是 eBay 特有的问题,但我不确定:我正在尝试向 eBay 开发人员 API 发送 XML 请求以检索 XML 响应。使用curl时,一切正常,我得到一个XML响应,告诉我缺少哪些API key (如果我通过HTTP header 提供它们,我会得到一个有效的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 内部服务器错误”。我尝试了两种非常基本的方法:

第一:

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)

第二个(这是我最喜欢的方法):

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 key 等并不重要,它无论如何都应该返回 XML 错误响应,而不仅仅是 HTTP 状态代码“500 内部服务器错误”。

有人看到我的 POST 请求做错了什么吗?

[编辑]顺便说一句,使用 URL ValueName API 与 Python 完美配合,但这只是 URL 上的 GET 请求。然而,我更喜欢使用 XML API。但是,如果不可能的话,我当然会切换到 ValueName URI。

最佳答案

它返回 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>'

关于python - 如何通过 Python 向 eBay API 发送有效的 XML POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5915086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com