1. 概要

このチュートリアルでは、さまざまなコマンドラインインターフェイス(CLI)プロセスを使用してSOAPWebサービスを利用する方法を示します。

2. SOAPWebサービス

この投稿の例を実行するには、以前の記事で開発されたSOAPWebサービスを使用します。 簡単に言うと、このサービスには、クライアントがアクセスできるエンドポイントがあり、リクエストに国名を指定します。 このサービスは、国の首都、人口、通貨の名前で返信します。

3. カール

cURLから始めましょう。これは、ネットワークプロトコルを介してデータを転送するためにおそらく最も広く使用されているコマンドラインツールだからです。 SOAP Webサービスをテストするには、リクエスト本文にSOAPエンベロープを使用してHTTPリクエストを作成する必要があります

Webサービスの場合、単純なHTTPPOSTリクエストは次のとおりです。

curl -v --request POST --header "Content-Type: text/xml;charset=UTF-8" \
--data \
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gs="http://www.baeldung.com/springsoap/gen"> \
<soapenv:Header/> \ 
<soapenv:Body> \ 
<gs:getCountryRequest> <gs:name>Poland</gs:name> </gs:getCountryRequest> \ 
</soapenv:Body> \ 
</soapenv:Envelope>' \
http://localhost:8080/ws

HTTPはcURLのデフォルトのプロトコルであるため、HTTPを使用していることを指定する必要はありません。 リクエストをテストしているので、-vオプションを介して冗長モードを使用します。

SOAPエンベロープ内で、国(ポーランド)を指定し、SOAPサーバーのURLでコマンドを終了します。 以前の記事例を使用して、サーバーをコンピューターにローカルにインストールしました。

-v オプションを使用しているため、詳細な応答が得られます。

* Connected to localhost (::1) port 8080 (#0)
> POST /ws HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.55.1
> Accept: */*
> Content-Type: text/xml;charset=UTF-8
> Content-Length: 282
>
* upload completely sent off: 282 out of 282 bytes
< HTTP/1.1 200
< Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
< SOAPAction: ""
< Content-Type: text/xml;charset=utf-8
< Content-Length: 407
< Date: Sun, 18 Jul 2021 23:46:38 GMT
<
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ns2:getCountryResponse xmlns:ns
2="http://www.baeldung.com/springsoap/gen"><ns2:country><ns2:name>Poland</ns2:name><ns2:population>38186860</ns2:population><ns2:capital>Warsaw
</ns2:capital><ns2:currency>PLN</ns2:currency></ns2:country></ns2:getCountryResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>* Connection #0 to hos
t localhost left intact

SOAP Webサービスの要求メッセージと応答メッセージは長くなる可能性があるため、ファイルに保存する方が便利です。 リクエスト本文をrequest.xmlに保存し、レスポンスの出力をファイルresponse.xmlにリダイレクトする場合、この場合のコマンドは非常に単純です

curl --header "Content-Type: text/xml;charset=UTF-8" -d @request.xml -o response.xml http://localhost:8080/ws

一般に、POSTはcURLによって推測されるため、以前のようにコマンドでPOSTを指定する必要はありません。

ターミナルで応答を読み取る必要がある場合は、コマンドをxmllintでパイプ処理して、XML応答を適切にフォーマットすることをお勧めします。

curl --request POST --header "Content-Type: text/xml;charset=UTF-8" -d @request.xml http://localhost:8080/ws | xmllint --format -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   725  100   407  100   318    407    318  0:00:01 --:--:--  0:00:01 15425<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <ns2:getCountryResponse xmlns:ns2="http://www.baeldung.com/springsoap/gen">
      <ns2:country>
        <ns2:name>Poland</ns2:name>
        <ns2:population>38186860</ns2:population>
        <ns2:capital>Warsaw</ns2:capital>
        <ns2:currency>PLN</ns2:currency>
      </ns2:country>
    </ns2:getCountryResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

4. Wget

Wgetを使用して同じリクエストを作成しましょう:

wget --post-file=request.xml --header="Content-Type: text/xml" http://localhost:8080/ws -O response.xml

応答は次のとおりです。

Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:8080... connected.
HTTP request sent, awaiting response... 200
Length: 407 [text/xml]
Saving to: ‘response.xml’

構文はcURLに似ており、以前と同じようにリクエストとレスポンスの本文をファイルに保存できます。

5. HTTPie

WgetとcURLは、SOAPサーバーをすばやくテストするための非常に便利なコマンドです。 これらは、すべての主要なOSディストリビューションで利用できます。 また、シェルスクリプトと簡単に統合できます。

HTTPieの利点は、Webサービスと対話するための非常に直感的な方法を提供することです。 で述べたようにドキュメンテーション :「HTTPieは、テスト、デバッグ、および一般的にAPIとHTTPサーバーとの対話用に設計されています。 シンプルで自然な構文を使用し、フォーマットおよびカラー化された出力を提供します。」

以前に行った簡単なリクエストを発行しましょう。今回はHTTPieを使用します。

echo '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gs="http://www.baeldung.com/springsoap/gen"> \
<soapenv:Header/> \ 
<soapenv:Body> \ 
<gs:getCountryRequest> <gs:name>Poland</gs:name> </gs:getCountryRequest> \ 
</soapenv:Body> \ 
</soapenv:Envelope>' | \
http -b POST http://localhost:8080/ws 'Content-Type:text/xml'

ファイルからリクエスト本文を抽出する場合:

http -b POST http://localhost:8080/ws 'Content-Type:text/xml' < request.xml

ファイル入力リダイレクトを使用するのと同じくらい簡単です。

HTTPieの使用方法の詳細については、ドキュメントを参照してください。

6. 概要

cURL、Wget、およびHTTPieを使用して、コマンドラインからSOAPWebサービスをすばやく呼び出す方法の簡単な例を見てきました。 また、3つのツールとそれらをいつ使用するかについて簡単に比較しました。