使用python向ESB端点提交SOAP请求

2024-10-01 00:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从python向ESB端点发送某个请求。基本上,我需要的是从ESB调用服务,而不必首先访问app

请帮忙,如有需要,我可以进一步澄清。在

下面我附上了虚拟请求。在

Server Time: 11:02:58:028 / Workstation Time: Monday, 22 February 2016 - 11:02:57:703
[DEBUG] SENDING SOAP REQUEST
MethodID: ID_getSubmitRequest; UID=-4820428854312736237
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:getSubmitRequest xmlns:ns2="urn:AC_IDM_SUBMITREQUESTVi" xmlns="urn:com.virsa.ae.ejbutil">
<ns2:requestDetails>
<application/>
<company>STACK OVERFLOW</company>
<customField>
<CustomFieldsDTO>
<name>Users ID Number</name>
<value>6303066107089</value>
</CustomFieldsDTO>
</customField>
<department xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<emailAddress>ronny.ronny@stack.co.za</emailAddress>
<employeeType>STACK</employeeType>
<firstName>RONNY</firstName>
<functionalArea xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<lastName>RONNY</lastName>
<locale xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<location xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<managerTelephone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<mgrEmailAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<mgrFirstName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<mgrId xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<mgrLastName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<priority>HIGH</priority>
<requestReason xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<requestType>SYSTEM</requestType>
<requestorEmailAddress>None</requestorEmailAddress>
<requestorFirstName>None</requestorFirstName>
<requestorId>BP5151</requestorId>
<requestorLastName>None</requestorLastName>
<requestorTelephone>None</requestorTelephone>
<roles>
<RoleData>
<action>ADD</action>
<comments xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<roleId>ZCB_STACK</roleId>
<sysId/>
<validFrom>2016-02-22T11:02:57+02:00</validFrom>
<validTo>9999-02-22T11:02:57+02:00</validTo>
</RoleData>
</roles>
<sNCName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<telephone>0123456789</telephone>
<unsecureLogon>false</unsecureLogon>
<userId>BP111</userId>
<validFrom>2016-02-22T11:02:57+02:00</validFrom>
<validTo>9999-02-22T11:02:57+02:00</validTo>
</ns2:requestDetails>
</ns2:getSubmitRequest>
</soapenv:Body>
</soapenv:Envelope>

编辑:我设法得到模块python模块请求,当我运行代码时,我得到:

^{pr2}$

Python代码:

import requests

request = u"""<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns2:getSubmitRequest xmlns:ns2="urn:SAPGRC_SUBMITREQUESTVi" xmlns="urn:com.virsa.ae.ejbutil">
         <ns2:requestDetails>
            <application/>
            <company>STACK OVERFLOW</company>
            <customField>
               <CustomFieldsDTO>
                  <name>Users ID Number</name>
                  <value>7706198530094</value>
               </CustomFieldsDTO>
            </customField>
            <department xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <emailAddress>ben.ten@standardbank.co.za</emailAddress>
            <employeeType>STACK</employeeType>
            <firstName>BEN</firstName>
            <functionalArea xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <lastName>TEN</lastName>
            <locale xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <location xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <managerTelephone xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <mgrEmailAddress xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <mgrFirstName xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <mgrId xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <mgrLastName xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <priority>HIGH</priority>
            <requestReason xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <requestType>SYSTEM</requestType>
            <requestorEmailAddress>None</requestorEmailAddress>
            <requestorFirstName>None</requestorFirstName>
            <requestorId>BP296</requestorId>
            <requestorLastName>None</requestorLastName>
            <requestorTelephone>None</requestorTelephone>
            <roles>
               <RoleData>
                  <action>ADD</action>
                  <comments xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
                  <company xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
                  <roleId>ZCB_STACK_RTS</roleId>
                  <sysId/>
                  <validFrom>2017-05-10T10:57:27+02:00</validFrom>
                  <validTo>9999-05-10T10:57:27+02:00</validTo>
               </RoleData>
            </roles>
            <sNCName xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
            <telephone>012345678</telephone>
            <unsecureLogon>false</unsecureLogon>
            <userId>BP9780</userId>
            <validFrom>2017-05-10T10:57:27+02:00</validFrom>
            <validTo>9999-05-10T10:57:27+02:00</validTo>
         </ns2:requestDetails>
      </ns2:getSubmitRequest>
   </soapenv:Body>
</soapenv:Envelope>"""

encoded_request = request.encode('utf-8')

headers = {"Host": "*endpoint to send the req*",
            "Content-Type": "application/soap+xml; charset=UTF-8",
            "Content-Length": str(len(encoded_request)),
            "SOAPAction": ""}

response = requests.post(url="*endpoint to send the req*",
                     headers = headers,
                     data = encoded_request,
                     verify=False)

print response.content #print response.text

Tags: instanceorgnonetruehttpwwwxmlschemanil
1条回答
网友
1楼 · 发布于 2024-10-01 00:27:43

你所需要的就是发出正确的http请求。方法之一是“做同样的事情

了解http请求是如何发出的。在您的例子中,最简单的方法是使用SoapUI工具。它是一个测试SOAP服务的工具。特性之一是将其配置为在控制台中显示tcp流量的转储。您将能够看到原始格式的响应请求。(好东西http是文本格式)

正如我提到的,只需发出POST请求,将SOAPAction头附加到application/xml中。那是不够的。在

无法从WSOESB服务器提供的wsdl文件中获取SOAPAction头和URL。在

这是个草图,可能需要调整一下。它是以Python3为基础的。在

import urllib.request
import urllib

# 8280 default port if you didn't change configuration of esb server
# /services default path if you didn't change configuration of esb server
# YourServiceName - service name 

url = 'http://esb-server-host:8280/services/YourServiceName'
method='POST'

# default SOAPAction extected for CUSTOME ESB PROXY SERVICE

headers = {'SOAPAction':'urn:mediate', 'Content-Type':'application/xml'}

req = urllib.request.Request(url, headers = headers, method=method)
with urllib.request.urlopen(req) as response:
   data = response.read()
   print(data)

相关问题 更多 >