eBay SOAP API - 缺少SOA操作名称头部
我正在尝试调用eBay的 findItemsByKeywords
方法,但遇到了一个问题,错误信息是:
服务器返回错误:'缺少SOA操作名称头'
我的代码如下:
from config import *
# url = 'http://developer.ebay.com/webservices/latest/ebaySvc.wsdl'
# url = 'http://svcs.ebay.com/services/search/BestMatchItemDetailsService/v1?wsdl'
url = 'http://developer.ebay.com/webservices/finding/latest/FindingService.wsdl'
from suds.client import Client
import logging
logging.basicConfig()
client = Client(url)
from suds.sax.element import Element
ns1 = ('ns1', 'http://www.ebay.com/marketplace/search/v1/services')
app_id = Element('X-EBAY-API-APP-ID', ns = ns1).setText(EBAY_API_APP_ID)
operation_name = Element('X-EBAY-SOA-OPERATION-NAME', ns = ns1).setText('findItemsByKeywords')
api_version = Element('X-EBAY-API-VERSION', ns = ns1).setText(EBAY_APP_VERSION)
site_id = Element('X-EBAY-API-SITE-ID', ns = ns1).setText(EBAY_API_SITE_ID)
encoding = Element('X-EBAY-API-REQUEST-ENCODING', ns = ns1).setText('SOAP')
service_name = Element('X-EBAY-SOA-SERVICE-NAME', ns = ns1).setText('FindingService')
client.set_options(soapheaders = [app_id, operation_name, api_version, site_id, encoding, service_name])
print client.service.findItemsByKeywords(keywords = 'book')
它打印出:
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.ebay.com/marketplace/search/v1/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<ns1:X-EBAY-API-APP-ID>123456-1234-1234-1234-7876b3f33c3</ns1:X-EBAY-API-APP-ID>
<ns1:X-EBAY-SOA-OPERATION-NAME>findItemsByKeywords</ns1:X-EBAY-SOA-OPERATION-NAME>
<ns1:X-EBAY-API-VERSION>721</ns1:X-EBAY-API-VERSION>
<ns1:X-EBAY-API-SITE-ID>0</ns1:X-EBAY-API-SITE-ID>
<ns1:X-EBAY-API-REQUEST-ENCODING>SOAP</ns1:X-EBAY-API-REQUEST-ENCODING>
<ns1:X-EBAY-SOA-SERVICE-NAME>FindingService</ns1:X-EBAY-SOA-SERVICE-NAME>
</SOAP-ENV:Header>
<ns0:Body>
<ns1:findItemsByKeywordsRequest>
<ns1:keywords>book</ns1:keywords>
</ns1:findItemsByKeywordsRequest>
</ns0:Body>
</SOAP-ENV:Envelope>
Traceback (most recent call last):
File "wsdl.py", line 22, in <module>
print client.service.findItemsByKeywords(keywords = 'book')
File "/ebay/suds/client.py", line 542, in __call__
return client.invoke(args, kwargs)
File "/ebay/suds/client.py", line 602, in invoke
result = self.send(soapenv)
File "/ebay/suds/client.py", line 657, in send
result = self.failed(binding, e)
File "/ebay/suds/client.py", line 712, in failed
r, p = binding.get_fault(reply)
File "/ebay/suds/bindings/binding.py", line 265, in get_fault
raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'Missing SOA operation name header'
3 个回答
0
我用了这段代码,结果它能正常工作。
headers={'X-EBAY-SOA-OPERATION-NAME':'findItemsByKeywords',
'X-EBAY-SOA-SECURITY-APPNAME': 'your-key'}
client = Client(url,headers=headers)
0
我在用一些vb.net代码做同样的事情时遇到了这个错误,结果发现我只是用了错误的AppID。我用的是正式的AppID,却搭配了测试环境的链接,换成正确的就没问题了。
3
可以使用 ebay-python,这是一个非官方的Python库,用来和eBay的API进行交互。这个库非常简单好用,而且效果不错。如果你想自己构建请求,也可以查看源代码,了解具体怎么做。