且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用 SOAPpy 将 Header 部分添加到 SOAP 请求

更新时间:2023-01-18 11:34:30

我不确定如何在 SOAPpy 中执行此操作,但我知道如何在 suds 中执行此操作.SUDS 与 SOAPpy 做同样的事情,但它更新并且仍然受支持.我认为不再支持 SOAPpy.下面显示了连接到 WSDL 并发送soap请求的代码:

I am not sure how to do this in SOAPpy but I do know how to do it in suds. SUDS does the same thing as SOAPpy but it is newer and is still supported. I don't think SOAPpy is supported anymore. Below show's the code to connect to a WSDL and send a soap request:

class MySudsClass():

def sudsFunction(self):

    url = "http://10.10.10.10/mywsdl.wsdl"

    # connects to WSDL file and stores location in variable 'client'
    client = Client(url)

    #I have no address set in the wsdl to the camera I connect to so I set it's location here
    client.options.location = 'http:/10.10.10.11'

    # Create 'xml_value' object to pass as an argument using the 'factory' namespace
    xml_value = client.factory.create('some_value_in_your_xml_body')

    #This send the SOAP request.
    client.service.WSDLFunction(xml_value)

在发送soap请求之前将其放入脚本中,它会添加您想要的任何标头.

Put this in the script before you send the soap request and it will add any headers you want.

    # Namespaces to be added to XML sent 
    wsa_ns = ('wsa', 'http://schemas.xmlsoap.org/ws/2004/08/addressing')
    wsdp_ns = ('http://schemas.xmlsoap.orf/ws/2006/02/devprof')

    # Field information for extra XML headers
    message = 'mymessage'
    address_txt = 'myheader_information'

    # Soapheaders to be added to the XML code sent
    # addPrefix allow's you to addc a extra namespace. If not needed remove it.
    message_header = Element('MessageID', ns=wsa_ns).setText(message)
    address_header = Element('Address', ns=wsa_ns).setText(address_txt).addPrefix(p='wsdp', u=wsdp_ns) 

    header_list = [message_header, address_header]

    # Soapheaders being added to suds command
    client.set_options(soapheaders=header_list)

这将允许您添加使 XML 能够理解的 wsa 编码:

This will allow you to add in wsa encding that makes the XML understand:

    # Attribute to be added to the headers to make sure camera verifies information as correct
    mustAttribute = Attribute('SOAP-ENV:mustUnderstand', 'true')
    for x in header_list:
        x.append(mustAttribute)

如果你使用这样的东西,你将能够添加任何标题、命名空间等.我已经使用过它并且效果很好.

If you use something like this you will be able to add any headers, namespaces etc. I have used this and it worked perfectly.

要在 SUDS 中添加许可标头,请添加:

To add the license header in SUDS add:

    license_key = Element('LicenseKey', ns=some_namespace).setText('88888-88888-8888-8888-888888888888')
    license_header = Element('LicenseHeader', ns=some_namespace).insert(license_key)

    license_attribute = Attribute(xmlns, "http://schemas.acme.eu/")
    license_header.append(license_attribute)