2017-05-24 15 views
0

PythonからESBエンドポイントに特定のリクエストを送信する必要があります。基本的に私が必要とするのは、アプリに行くことなくESBからサービスを呼び出すことです。Pythonを使用してSOAPリクエストをESBエンドポイントに送信

ご要望があればお手伝いしてください。

以下、ダミーリクエストを添付しました。

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> 

編集:私は、モジュールのpythonモジュールの要求を得ることができたと私は私が手のコードを実行する場合:

​​

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>[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/ja/master/ – simar

+0

です。とにかく、実際には単純です。 urlへのhttp POST要求を作成します(サービスのwsdlで検索します)。 content-type application/xmlを作成し、ヘッダーSOAPAction(service wsdlの値)を追加します。あなたが送る必要のある身体。完了しました – simar

+0

私は本当に混乱しています。以前はESBで作業したことはありませんでした。私はフロントエンド側からJavaコードからサービスを呼び出していますが、この場合はPythonを使用していくつかのプロセスを自動化しようとしています。 – SmartKid

答えて

1

が必要なものはすべてが適切なHTTPを作るです要求。方法の1つは "Do same同じ"

どのように、どのようにhttpリクエストが行われているか調べてください。あなたのケースで最も簡単なのはSoapUIツールを使用することです。 SOAPサービスをテストするためのツールです。機能のonは、コンソールにtcpトラフィックのダンプを表示するように設定します。文字通り、生の形式で応答要求を見ることができます。私はのSOAPActionヘッダを付加し、アプリケーション/ xmlののContent-Typeヘッダを設定し、POST要求を行うだけで言及したよう

(良いことはhttpはテキスト形式です)。それは十分です。

SOAPActionヘッダーとURLは、WSOESBサーバーによって提供されるwsdlファイルから取得できません。

これはスケッチであり、調整が必要な場合があります。それは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) 
+0

Simarさん、ありがとうございましたが、ここでスケッチでどこにリクエストがありますか?私が渡す必要がある議論があります。また、wsdlを見るとSOAPActionが見つかりません。 – SmartKid

+0

管理コンソールに入るhttp:// server-address:9443/carbon。デフォルトのadmin:admin。 Click proxy services – simar

+0

例はstep5の画像です。デフォルトのエコーサービスの説明。 「クライアント操作」の青いリンクwsdl1.1 http://xacmlinfo.org/2012/11/09/disabling-ws-security-for-in-or-out-messages-in-axis2/ – simar

関連する問題