2017-05-24 1 views
0

특정 요청을 파이썬에서 ESB 엔드 포인트로 보내야합니다. 기본적으로 필요한 것은 앱 1에 가지 않고 ESB에서 서비스를 호출하는 것입니다.파이썬을 사용하여 ESB 엔드 포인트에 SOAP 요청 제출

도움이 필요하시면 알려주세요.

아래에는 더미 요청이 첨부되어 있습니다.

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>[email protected]</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></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> 

편집 : 나는 모듈 파이썬 모듈 요청을 그럭저럭 내가 코드를 실행할 때 얻을 :

Traceback (most recent call last): 
    File "C:\Python27\Soap.py", line 79, in <module> 
    verify=False) 
    File "C:\Python27\lib\site-packages\requests\api.py", line 108, in post 
    return request('post', url, data=data, json=json, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\api.py", line 50, in request 
    response = session.request(method=method, url=url, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 464, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send 
    r = adapter.send(request, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\adapters.py", line 415, in send 
    raise ConnectionError(err, request=request) 
ConnectionError: ('Connection aborted.', error(10061, 'No connection could be made because the target machine actively refused it')) 

파이썬 코드 : 당신이 필요로하는

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>[email protected]</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></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 
+0

SoapUI가 설치되어 있어야합니다. http 로그인 설정을 활성화하십시오. 그런 다음 새 프로젝트를 만듭니다. 요청하십시오. 콘솔에서 http 요청 (url, headers, body)을 다시 만드는 데 필요한 모든 것을 볼 수 있습니다. 가장 간단한 라이브러리는 http://docs.python-requests.org/en/master/ – simar

+0

어쨌든 실제로는 간단합니다. url에 대한 http POST 요청을 작성하십시오 (서비스의 wsdl에서 찾으십시오). content-type application/xml을 만들고 헤더 SOAPAction (service wsdl의 값)을 추가합니다. 몸을 보낼 필요가있는 것. 완료 – simar

+0

나는 정말로 혼란 스럽다. 전에 ESB에서 일한 적이 없다. 프론트 엔드 쪽에서 자바 코드에서 서비스를 호출하지만이 경우에는 파이썬을 사용하는 프로세스를 자동화하려고한다. – SmartKid

답변

1

모든 적절한 HTTP를 할 것입니다 의뢰. 방법 중 하나는 "동일합니다"

어떻게 HTTP 요청이 이루어지는 지 알아보십시오. 가장 간단한 경우 SoapUI 도구를 사용하는 것입니다. SOAP 서비스를 테스트하는 도구입니다. 에 기능의 콘솔에 TCP 트래픽의 덤프를 표시하도록 구성됩니다. 말 그대로 원시 형식의 응답 요청을 볼 수 있습니다. 난 그냥, POST 요청을 의 SOAPAction에게 헤더를 추가하고 콘텐츠 형식 헤더 응용 프로그램/XML로 설정 언급해야

(좋은 일에 http 텍스트 형식입니다). 그것은 충분하다.

SOAPAction 헤더 및 URL은 WSOESB 서버에서 제공하는 wsdl 파일에서 가져올 수 없습니다.

이것은 스케치이므로 약간 조정해야 할 수도 있습니다. 그것은 파이썬 3 기반이다.

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) 
+0

Simar에게 감사드립니다. 그러나 이제 스케치를 통해 요청이 어디로 이동합니까? 제가해야 할 논쟁이 있습니다. 또한 wsdl을 볼 때 SOAPAction을 찾을 수 없습니다. – SmartKid

+0

관리 콘솔에 입장 http : // server-address : 9443/carbon. 기본 관리자 : admin. 클릭 프록시 서비스 – simar

+0

예는 step5의 이미지입니다. 기본 에코 서비스에 대한 설명입니다. "클라이언트 운영"에 대한 파란색 링크 wsdl1.1 http://xacmlinfo.org/2012/11/09/disabling-ws-security-for-in-or-out-messages-in-axis2/ – simar

관련 문제