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を記述すれば良い。