ncatでHTTPリクエストの送信中にクライアントの接続を切断する

概要

APIデバッグにおいて、クライアントサイドで再起動やダウン、ネットワークエラーなどにより、クライアント側でHTTPリクエスト送信中に接続を切断するようなケースを手動で再現したい。 HTTPで通信する場合には、netcatを使って対話的にHTTPリクエストの途中で切断すればこれを再現できる。

しかし、HTTPSで通信する場合には、SSL/TLS Handshakeや暗号化を手動で行うことはできないので、それを肩代わりしてくれるncatを使う必要がある。

実施方法

手元にncatがない場合、docker imageでncatがバンドルされているものを利用できる。

以下のコマンドを実行し、HTTPリクエストを途中まで書き込んでアイドルタイムアウトを待てば、3秒後に自動で切断されるため再現が可能である。

$ docker run --rm -it raesene/ncat -C -i 3000ms --ssl example.com 443
POST / HTTP/1.1
Host: example.com
User-Agent: xxx
Content-Type: application/json
Content-Length: 26

--sslオプションを指定することで、HTTPSで必要なHandshake/暗号化を肩代わりしてくれるので、生のHTTPを記述すれば良い。

参考