web-dev-qa-db-ja.com

POSTリクエストをダンプするだけの汎用HTTPサーバー?

与えられた部分をリッスンするコマンドラインツールを探しています。すべてのHTTP POSTリクエストを除いて、それをダンプします。

テスト目的で、つまりHTTP POSTリクエストを発行するクライアントのテストに使用します。

つまり、対応するcurl -Fを検索しています(これを使用して、テストHTTP POSTをHTTPサーバーに送信できます)。

おそらくsocat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...のようなものですが、socatはHTTPを話さないため十分ではありません。

26
maxschlepzig

ncsocatなどの単純なコアコマンドラインツールは、進行中の特定のHTTP要素(チャンク、転送エンコーディングなど)を処理できないようです。その結果、実際のWebサーバーと通信する場合と比較して、予期しない動作が発生する可能性があります。したがって、私が最初に考えたのは、小さなWebサーバーをセットアップし、それが望みどおりの動作をするようにするためのすべての出力をダンプする最も簡単な方法を共有することです。

Python Tornado を使用して思いついた最短のコード:

#!/usr/bin/env python

import tornado.ioloop
import tornado.web
import pprint

class MyDumpHandler(tornado.web.RequestHandler):
    def post(self):
        pprint.pprint(self.request)
        pprint.pprint(self.request.body)

if __name__ == "__main__":
    tornado.web.Application([(r"/.*", MyDumpHandler),]).listen(8080)
    tornado.ioloop.IOLoop.instance().start()

pprint行を置き換えて、必要な特定のフィールドのみを出力します。たとえば、self.request.bodyまたはself.request.headers。上記の例では、すべてのインターフェースでポート8080をリッスンしています。

これに代わるものはたくさんあります。 web.pyBottle など.

(私はかなりPython指向、ごめんなさい)


出力方法が気に入らない場合は、とにかく実行して、次のようにtcpdumpを試してください。

tcpdump -i lo 'tcp[32:4] = 0x484f535420'

すべてのHTTP-POSTリクエストの実際の生のダンプを表示します。または、Wiresharkを実行するだけです。

16
gertvdijk

私もこれを探していました Node.js http-echo-serverに実行されました

npm install http-echo-server -g
PORT=8081 http-echo-server

すべての要求を受け入れ、ヘッダーを含む完全な要求をコマンドラインにエコーします。

43
Tobias