eBay的SOAP API - 缺少SOA操作名头 [英] EBay SOAP API - Missing SOA operation name header

查看:363
本文介绍了eBay的SOAP API - 缺少SOA操作名头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图调用易趣的 findItemsByKeywords 方式,我得到服务器故障提出:SOA缺少操作名头

 从配置进口*#URL ='http://developer.ebay.com/webservices/latest/ebaySvc.wsdl
#URL ='http://svcs.ebay.com/services/search/BestMatchItemDetailsS​​ervice/v1?wsdl
URL ='http://developer.ebay.com/webservices/finding/latest/FindingService.wsdl从suds.client进口客户端
进口记录
logging.basicConfig()
客户端=客户端(URL)从suds.sax.element import元素
NS1 =('NS1','http://www.ebay.com/marketplace/search/v1/services')
APP_ID =元素('X-EBAY-API-APP-ID',NS = NS1).setText(EBAY_API_APP_ID)
OPERATION_NAME =元素('X-EBAY-SOA-OPERATION名',NS = NS1).setText('findItemsByKeywords')
API_VERSION =元素('X-EBAY-API的版本',NS = NS1).setText(EBAY_APP_VERSION)
SITE_ID =元素('X-EBAY-API-SITE-ID',NS = NS1).setText(EBAY_API_SITE_ID)
编码=元素('X-EBAY-API-REQUEST编码',NS = NS1).setText('SOAP')
SERVICE_NAME =元素('X-EBAY-SOA的服务名',NS = NS1).setText('FindingService')
client.set_options(的SOAPHeaders = [APP_ID,OPERATION_NAME,API_VERSION,SITE_ID,编码,SERVICE_NAME])打印client.service.findItemsByKeywords(关键字='书')

它打印:

 < SOAP-ENV:信封的xmlns:NS0 =htt​​p://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 /信封/>
   < SOAP-ENV:页眉和GT;
      < NS1:X-EBAY-API-APP-ID> 123456-1234-1234-1234-7876b3f33c3< / NS1:X-EBAY-API-APP-ID>
      < NS1:X-EBAY-SOA - 运营 - 名称>&findItemsByKeywords LT; / NS1:X-EBAY-SOA - 运营 - 名称>
      < NS1:X-EBAY-API的版本> 721< / NS1:X-EBAY-API的版本>
      < NS1:X-EBAY-API-SITE-ID> 0℃; / NS1:X-EBAY-API-SITE-ID>
      < NS1:X-EBAY-API-REQUEST编码> SOAP< / NS1:X-EBAY-API-REQUEST编码>
      < NS1:X-EBAY-SOA的服务,名称>&FindingService LT; / NS1:X-EBAY-SOA的服务,名称>
   < / SOAP-ENV:页眉和GT;
   < NS0:身体与GT;
      < NS1:findItemsByKeywordsRequest>
         < NS1:关键字>书< / NS1:关键字>
      < / NS1:findItemsByKeywordsRequest>
   < / NS0:身体与GT;
< / SOAP-ENV:信封>
回溯(最近通话最后一个):
  文件wsdl.py22行,上述<&模块GT;
    打印client.service.findItemsByKeywords(关键字='书')
  文件/ebay/suds/client.py,542线,在__call__
    返回client.invoke(参数,kwa​​rgs)
  文件/ebay/suds/client.py,线路602,在调用
    结果= self.send(soapenv)
  文件/ebay/suds/client.py,线路657,在发送
    结果= self.failed(绑定,E)
  文件/ebay/suds/client.py,线路712,失败
    R,P = binding.get_fault(回复)
  文件/ebay/suds/bindings/binding.py,265线,在get_fault
    提高WebFault此类(P,faultroot)
suds.WebFault:服务器故障提出:缺少SOA操作名头


解决方案

使用易趣,蟒蛇,蟒蛇非官方包装对eBay API 。它已经死了易于使用,它的作品。你也可以看到,如果你想使用自己如何构建请求的源$ C ​​$ C。

I am trying to invoke eBay's findItemsByKeywords method and I get Server raised fault: 'Missing SOA operation name header':

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')

it prints:

<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'

解决方案

Use ebay-python, unofficial python wrapper for eBay API. It's dead easy to use and it works. You can also see the source code on how to construct the request if you want to use your own.

这篇关于eBay的SOAP API - 缺少SOA操作名头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆