我需要从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
你所需要的就是发出正确的http请求。方法之一是“做同样的事情”
了解http请求是如何发出的。在您的例子中,最简单的方法是使用SoapUI工具。它是一个测试SOAP服务的工具。特性之一是将其配置为在控制台中显示tcp流量的转储。您将能够看到原始格式的响应请求。(好东西http是文本格式)
正如我提到的,只需发出POST请求,将SOAPAction头附加到application/xml中。那是不够的。在
无法从WSOESB服务器提供的wsdl文件中获取SOAPAction头和URL。在
这是个草图,可能需要调整一下。它是以Python3为基础的。在
相关问题 更多 >
编程相关推荐