标签: zeep

SOAP post()操作获取Java nullptr异常

我遇到使用Savon发布SOAP的Ruby代码的问题

我有一个参数XML_BODY,显然没有被发送,或者,如果它是,接收它的Java代码看起来为null(如果我尝试返回"TEST"+ XML_BODY,响应显示"TEST null")

其他数据似乎发送好 - 真的很困惑

客户端操作是pub_mugs(),post(),subscribe()

这个Python/Zeep代码完全成功

from requests import Session
from zeep import Client
from zeep.transports import Transport

if __name__ == "__main__":

  url="http://localhost:8080/Wormhole?wsdl"

  with open('../../web/web/xsd/DETEP2012-with-content.xml', 'r') as f:
    xml=f.read().replace('\n', '')

  session = Session()
  session.verify = False
  transport = Transport(session=session)
  client = Client(url, transport=transport)

  print client.service.PubMugs(username='usr',password='pwd') #SUCCESS

  print client.service.subscribe(username='usr',password='pwd') #SUCCESS

  print client.service.post(username='usr',password='pwd',mug='110',XML_BODY=xml) #SUCCESS
Run Code Online (Sandbox Code Playgroud)

这个Ruby/Savon代码成功用于pub_mugs()和subscribe(),但是对于post()失败了

  client = Savon.client(wsdl: ENV["WSDL"],
      :ssl_verify_mode => :none,
      :raise_errors => false,
      pretty_print_xml: true)

  doc = File.open("../web/web/xsd/DETEP2012-with-content.xml") { |f| Nokogiri::XML(f) }

  xml = doc.to_xml.delete("\n").split(">",2)[1] …
Run Code Online (Sandbox Code Playgroud)

ruby soap savon zeep

4
推荐指数
1
解决办法
256
查看次数

使用zeep(python)在http标头中为SOAP请求消息设置用户名和密码?

如何使用python的zeep在http标头中为SOAP请求消息设置用户名和密码?我相信这就是为什么我得到连接拒绝错误但无法弄清楚可以设置http标头详细信息的位置.我甚至尝试在wsdl文件上运行python -mzeep(与创建客户端和调用Web服务方法相比),但它仍然无法连接.

python passwords soap web-services zeep

3
推荐指数
1
解决办法
2428
查看次数

Python - Zeep SOAP复杂标题

我想将"Complex"Header传递给带有zeep库的SOAP服务

这是它应该是什么样子

 <soapenv:Header>
      <something:myVar1>FOO</something:myVar1>
      <something:myVar2>JAM</something:myVar2>
 </soapenv:Header>
Run Code Online (Sandbox Code Playgroud)

我想我成功地以这种方式发送标题

header = xsd.Element(
    '{http://urlofthews}Header',
        xsd.ComplexType([
        xsd.Element(
        '{http://urlofthews}myVar1',
        xsd.String()),
        xsd.Element(
        '{http://urlofthews}myVar2',
        xsd.String())
        ])
    )

header_value = header(myVar1='FOO',myVar2='JAM')
print (header_value)
datasoap=client.service.UserRessourcesCatalog(requete,_soapheaders=[header_value])
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用XSD在我的Header中声明并传递命名空间"something".

任何帮助?

先谢谢.

最好的祝福


正如文档中提到的那样

http://docs.python-zeep.org/en/master/headers.html

"另一种选择是传递一个lxml的Element对象.如果wsdl没有定义一个soap标头但服务器确实需要它,这通常很有用."

这是我的情况,所以我试过

try:
        import xml.etree.cElementTree as ET
    except ImportError:
        import xml.etree.ElementTree as ET
    ET.register_namespace('something', 'http://urlofthews')

    headerXML = ET.Element("soapenv:Header")
    var1 = ET.SubElement(headerXML, "something:myVar1")
    var1.text = "FOO"
    var2 = ET.SubElement(headerXML, "something:myVar2")
    var2.text = "JAM"


headerDict=xmltodict.parse(ET.tostring(headerXML))
print (json.dumps(headerDict))

    datasoap=client.service.UserRessourcesCatalog(requete,_soapheaders=headerDict)
Run Code Online (Sandbox Code Playgroud)

但我得到:ComplexType()得到了一个意外的关键字参数u'soapenv:Header'.签名:``

soap python-3.x zeep

3
推荐指数
1
解决办法
7321
查看次数

用Zeep解析WSDL

我想用Zeep解析WSDL文件并退出:

  • 所有操作
  • 请求每个操作的xml消息

关于解析wsdl的任何示例?

我猜我应该使用zeep.wsdl和parse_service方法?

/一种

zeep

3
推荐指数
2
解决办法
3948
查看次数

如何解决SSL问题SSL_CTX_use_certificate:ca md在Python Zeep上太弱

在我向Frontierlink Web Service发出SOAP请求时,直到出现此错误之前,我的代码一直在工作。

File "/home/venv/lib/python2.7/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
Run Code Online (Sandbox Code Playgroud)

OpenSSL.SSL.Error:[(“ SSL例程”,“ SSL_CTX_use_certificate”,“ ca md太弱”))

我是否需要重新生成我用来连接的pem文件,或者问题出在我用来生成pem文件的.p12文件上?

如果您需要有关我的问题的更多信息,请告诉我。

笔记:

我使用的OpenSSL版本是:OpenSSL 1.0.2k-fips

先感谢您!

python openssl zeep

3
推荐指数
1
解决办法
2597
查看次数

如何在Python中使用zeep设置默认xmlns?

我想使用 zeep 进行一些 API 调用。预期输出是:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://cabapi-prod.service.dbrent.net/hal2_cabserver/">
  <soap:Body>
    <CABSERVER.listFreeBikes>
      <CommonParams>
        <UserData>
          <User>XXXXXXXXXXXXXX</User>
          <Password>XXXXXXXXXXXXXX</Password>
        </UserData>
        <LanguageUID>1</LanguageUID>
        <RequestTime>XXXXXXXXXXXXXX</RequestTime>
        <Version>2</Version>
      </CommonParams>
      <SearchPosition>
        <Longitude>XXXXXXXXXXXXXX</Longitude>
        <Latitude>XXXXXXXXXXXXXX</Latitude>
      </SearchPosition>
      <maxResults>100</maxResults>
      <searchRadius>844</searchRadius>
      <CustomerData>
        <Phone>XXXXXXXXXXXXXX</Phone>
        <Password>XXXXXXXXXXXXXX</Password>
        <PhoneUserEdited>false</PhoneUserEdited>
      </CustomerData>
    </CABSERVER.listFreeBikes>
  </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

但是,我只能得到:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Body>
    <ns0:CABSERVER.listFreeBikes xmlns:ns0="https://xml.dbcarsharing-buchung.de/hal2_cabserver/">
      <CommonParams>
        <UserData>
          <User>XXXXXXXXXXXXXX</User>
          <Password>XXXXXXXXXXXXXX</Password>
        </UserData>
        <LanguageUID>1</LanguageUID>
        <RequestTime>XXXXXXXXXXXXXX</RequestTime>
        <Version>2</Version>
      </CommonParams>
      <CustomerData>
        <Phone>XXXXXXXXXXXXXX</Phone>
        <Password>XXXXXXXXXXXXXX</Password>
        <PhoneUserEdited>false</PhoneUserEdited>
      </CustomerData>
      <SearchPosition>
        <Longitude>XXXXXXXXXXXXXX</Longitude>
        <Latitude>XXXXXXXXXXXXXX</Latitude>
      </SearchPosition>
      <maxResults>100</maxResults>
      <searchRadius>844</searchRadius>
    </ns0:CABSERVER.listFreeBikes>
  </soap-env:Body>
</soap-env:Envelope>
Run Code Online (Sandbox Code Playgroud)

服务器无法正确识别我的请求,我认为这是由于命名空间造成的。我做了一些研究,但没有找到将默认命名空间(xmlns)设置为https://xml.dbcarsharing-buchung.de/hal2_cabserver/的方法。相反,它被添加为额外的命名空间。

这是我当前的代码:

with client.settings(raw_response=True):
    ## Common Params related
    ### UserData related …
Run Code Online (Sandbox Code Playgroud)

python soap python-3.x zeep

3
推荐指数
1
解决办法
2971
查看次数

Python Zeep Client请求在xml异常中引发错误

当我运行以下代码时,我不断收到以下错误:here is an error in XML document (113, 25). ---> The string '' is not a valid Boolean value.我不明白为什么会这样。是文档,根据该文档,不需要布尔字段。

from zeep import Client

client = Client('http://services.resumeparsing.com/ResumeService.asmx?wsdl')
response = client.service.ParseResume(request={'AccountId': 'XXXXXXX',\
    'ServiceKey':'XXXXXXXXX',\
    'FileBytes': file_bytes, 'FileText': file_text, \
    })
print(response)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

python xml api zeep

2
推荐指数
1
解决办法
5281
查看次数

使用 zeep / python 创建 XML 序列

我正在使用 zeep (Python 3.6) 与 SOAP API 交互,并使用包含此部分的 WSDL 模式:

<xs:element name="passengers">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="passenger" type="com:PassengerType"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

所以我希望我的 zeep 生成的 XML 看起来像这样:

<book:passengers>
    <book:passenger>
        ...redacted...
    </book:passenger>
</book:passengers>
Run Code Online (Sandbox Code Playgroud)

我用 Zeep 实现这一目标的第一次尝试如下所示:

passengers = [factories.PassengerType()]
Run Code Online (Sandbox Code Playgroud)

但是,将其发送到我的 SOAP API 时,会产生以下错误:

File "/usr/local/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 220, in validate
  "Missing element %s" % (self.name), path=render_path)
zeep.exceptions.ValidationError: Missing element passenger (createBookingRecordRequest.passengers)
Run Code Online (Sandbox Code Playgroud)

我相信这是因为我的 'passengers' 属性应该包含一个带有标签名称“passenger”的 Zeep 对象,该对象将包含我的元素列表。我已经尝试修补zeep.xsd.AnyType以实现这一目标,但尚未成功。

任何建议,将不胜感激。

python xsd soap wsdl zeep

2
推荐指数
1
解决办法
3195
查看次数

如何从 zeep 响应中提取 XML

假设我使用 python zeep 对这样的服务器执行查询:

from zeep import Client

wsdl_url = "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL"

client = Client(wsdl_url)
result = client.service.ListOfContinentsByCode()
Run Code Online (Sandbox Code Playgroud)

我想看到从这个方法返回的原始 XML,即以某种方式从结果中提取它。这可能吗?如何?

python xml wsdl zeep

2
推荐指数
2
解决办法
5194
查看次数

转义保留关键字 Python

我正在使用 ZEEP 连接到 NetSuite。创建发票时我需要传递给 NS 的参数之一是“类”。如果我理解正确,以下行无法编译的原因是因为 'class' 是保留关键字。

invoice = invoiceType(
    customFieldList = customFieldList,
    entity = entityRecord,
    subsidiary = subRecord,
    department = departmentRecord,
    location = locationRecord,
    class = classRecord
)
Run Code Online (Sandbox Code Playgroud)

我没有选择将最后一个参数从“类”更改为“类”或其他内容,因为这是 NetSuite 期望调用的参数。我可以在 python 中使用任何替代方法吗?有没有办法在将其作为参数传递时对其进行转义?

python netsuite python-3.x suitetalk zeep

1
推荐指数
1
解决办法
905
查看次数

如何通过python发送soap请求?

我有肥皂请求,想通过 python zeep 脚本发送它。

POST /IntegrationService/IntegrationService.asmx HTTP/1.1
Host: 192.168.66.2
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <SendHardwareCommand xmlns="http://parsec.ru/Parsec3IntergationService">
      <sessionID>guid</sessionID>
      <territoryID>guid</territoryID>
      <command>int</command>
    </SendHardwareCommand>
  </soap12:Body>
</soap12:Envelope>
Run Code Online (Sandbox Code Playgroud)

我尝试自己写一下

from pprint import pprint
from zeep import Client
CODE = '1'
LOGIN = 'PARSEC'
PASSWORD = 'pass'
client = Client('http://192.168.66.2:10101/IntegrationService/IntegrationService.asmx?wsdl', strict=False)

result = client.service.SendHardwareCommand(
    SendHardwareCommandRequest={'code': CODE, 'MessageType': 0},
    AuthorizationHeader={'login': LOGIN, 'password': PASSWORD})
pprint(result)
Run Code Online (Sandbox Code Playgroud)

怎样做才正确呢?

python soap zeep

1
推荐指数
1
解决办法
1万
查看次数

使用 zeep.Client Python 将自定义标头添加到 SOAP 请求

我在创建自定义标头并将其添加到 SOAP 标头时遇到问题。如果我写一个 RAW 请求它可以工作,但我想在 Python3 中使用 zeep 库

我尝试添加这些标题

header = xsd.Element(
        'headerMDMPeticio',xsd.ComplexType([
            xsd.Element('idSistemaOrigen',xsd.String()),
            xsd.Element(
                'headerMidominio',xsd.ComplexType([
                    xsd.Element('usuariConnectat',xsd.String()),
                    xsd.Element('rolUsuariConnectat',xsd.String())
                ])
            )
        ])
    )
header_value = header(headerMidominio={'usuariConnectat':'user','rolUsuariConnectat':'roleExample'})
Run Code Online (Sandbox Code Playgroud)

摘自这些书https://buildmedia.readthedocs.org/media/pdf/python-zeep/master/python-zeep.pdf(第18页)

这是我正在使用的生成 XML 的 python 代码

header = xsd.Element(
        'headerMDMPeticio',xsd.ComplexType([
            xsd.Element('idSistemaOrigen',xsd.String()),
            xsd.Element(
                'headerMidominio',xsd.ComplexType([
                    xsd.Element('usuariConnectat',xsd.String()),
                    xsd.Element('rolUsuariConnectat',xsd.String())
                ])
            )
        ])
    )
header_value = header(headerMidominio={'usuariConnectat':'user','rolUsuariConnectat':'roleExample'})
Run Code Online (Sandbox Code Playgroud)

预期(从 SOAP UI 中提取),重点关注 v01:headerMDMPeticio 和此节点的子节点。在 body 内部我还需要添加 v012:usosDada 来请求。

Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="http://services.dev.midominio.edu/soa/servei/CodisProjectesMDM/v01_00/consultarCodiProjecteMDMInput"
Content-Length: 1811
Host: services.dev.midominio.edu
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:v01="http://midominio.edu/soa/esquema/ElementsComunsMDM/v01_00" xmlns:v011="http://midominio.edu/soa/esquema/ElementsComuns/v01_01" xmlns:v012="http://midominio.edu/soa/servei/MDMCodisProjectes/v01_00">
    <soap:Header> …
Run Code Online (Sandbox Code Playgroud)

soap python-3.x zeep

1
推荐指数
1
解决办法
8461
查看次数

SOAP API 获取 Cookie

我正在使用 SOAP API 来获取带有应该返回的 cookie 的身份验证密钥。

from zeep import Client
client = Client("AuthenticationService.xml")
result = client.service.ValidateUser(username, password, "")
result
Run Code Online (Sandbox Code Playgroud)

然而,结果是,我得到了 True 布尔值,但没有包含身份验证密钥的 Cookie。

从下图中,您可以看到使用 SoapUI 的同一请求返回一个 cookie。我想知道如何在 Python 中做到这一点。

SoapUI 软件响应

python soap wsdl soapui zeep

0
推荐指数
1
解决办法
581
查看次数

标签 统计

zeep ×13

python ×9

soap ×8

python-3.x ×4

wsdl ×3

xml ×2

api ×1

netsuite ×1

openssl ×1

passwords ×1

ruby ×1

savon ×1

soapui ×1

suitetalk ×1

web-services ×1

xsd ×1