スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

WiresharkでのパケットキャプチャとxmllintでのXML整形

今作っているWebアプリでXMLでのやりとりを行っているんだが
それを他の人に見せる必要が出てきたのでコマンドラインベースで
どういうXMLが返却されるかを出力するためいろいろ調べてみた。

アプリ上でやっていることはSOAP通信なので
インプットにもXMLが必要になってくる。
定義をいろいろ調べるのは面倒だったので

クライアントを動かす

XMLのやりとりをパケットキャプチャする

curlコマンドで再現

という方法を取ることにした。
まずはパケットキャプチャだがこれはwiresharkで行う。
今回はたまたま自ホスト以外だったためそんなに苦労せずに済んだ。
フィルターにip.addr == [対向のIPアドレス] and tcp.port == [アプリで使うポート番号]
と設定、適用し、パケットキャプチャ開始。

そういえば起動時にインターフェースを間違えて
パケット流れねーなーってハマってたな。。。。

んで、クライアントを動かして通信してキャプチャしたパケットの一覧からPOST通信しているっぽいところを
右クリック→「Follow TCP Stream」を選ぶと
クライアント側からPOSTしたXMLとサーバー側からのレスポンスのXMLが見える。
ここでクライアント側からPOSTしたXMLをコピーし、
XMLエディタ等で整形、ファイルに落としてから今度はそれをcurlで投げてみる。

> curl "http://xxx.xxx.xxx.xxx/path/to/app" --data-binary @[整形したXML] -H "Content-type: text/xml; charset=utf-8"


ちなみに、XMLエディタで整形した場合にはものによっては
要素にスペースが入っていたものがごっそり削られていてサーバー側で
unknownエラーで弾かれてしまうので要素の内容は正確に写すよう気をつけましょう。

もどってくるXMLは整形されていない&実際にコマンドラインからXMLを見せる環境がWindowsだったので
以下のツールでXMLを整形&UTF-8をSJISに変換した。
xmllint
http://code.google.com/p/xmllint/
nkf32
プロジェクトにあったものを流用。多分ここ↓のものかな?
http://www.vector.co.jp/soft/win95/util/se295331.html


最終的にはこんなコマンドになりました。

> curl "http://xxx.xxx.xxx.xxx/path/to/app" --data-binary @[整形したXML] -H "Content-type: text/xml; charset=utf-8" | nkf32.exe -s | xmlint-1.0.exe



SOAPの通信結果を見るというのは今後役に立つかもしれない。
※自分が設計するときはこんな面倒くさい規格使わないだろうけど・・・・・
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

ラム君(モヒカンVer)

Author:ラム君(モヒカンVer)
都内でプログラマのようなものをやっています。
まだまだ初心者ですがよろしくお願いします。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。