hacomono TECH BLOG

フィットネスクラブやスクールなどの顧客管理・予約・決済を行う、業界特化型SaaS「hacomono」を提供する会社のテックブログです!

httpbinの読み方しっていますか?



こんにちは。運用保守部でエンジニアをやっています みつを です。
2023年6月に入社してはや二年と数ヶ月が経ち、現在も「外部のサービスと hacomono を繋げる」事に取り組んでいます。
外部のサービスと繋げると言えばその一つの手段がWebhookです。
Webhookではエンドポイントに疎通しない、疎通するが返答が遅い、想定外のhttp statusが返ってくる、リトライは想定通りに行われるか?の確認が重要となります。
皆様はどのような確認手段を利用していますか?
今回はそんな日々で私を支えてくれるツール(httpbin)について、ご紹介させていただきます。

あしたのために(その2)httpbin

エンジニア用語ですと、nginxはの読み方が「ンジンックス」かと思いきや「エンジンエックス」だったりと初見殺しの読み方が多いです。
それではhttpbinの場合はどうでしょうか?
なんと「エイチティーティーピービン」まったくもって普通でした。ごめんなさい。



httpbinはシンプルなHTTPリクエスト&レスポンスサービスで、モックサーバーとして利用することが出来ます。
簡単な利用であればWeb上にホスティングされている httpbin.org を利用することができます。

# httpbinからuuid取得する
$ curl -s https://httpbin.org/uuid | jq -r '.uuid'
2eef7738-b7df-4512-a9e0-6117328de588

定常的に利用する場合にはローカルPC上にdockerやpythonで起動するようにしましょう。
実行が早い、OSSサーバーのリソースに影響を受けない、ローカルデータでのヒヤリハットを防ぐ等が目的です。

# httpbinをローカルのポート18080で起動して利用する
$ docker run --platform linux/amd64 -p 18080:80 kennethreitz/httpbin
$ curl -s http://localhost:18080/uuid | jq -r '.uuid'
fd082cce-2e8e-46a1-9ec9-17d92dcf8d62

インターネット経由での接続を行いたい場合には ngrok などのサービスを併用を検討してみてください。

# ローカルのポートをngrok経由でアクセス出来るようにする
# https://abcd-1234-ab-abcd-1-1234-1234-1234-ab12.ngrok.io とアクセスが出来る
$ ngrok http 18080

httpbin側で接続を確認したい場合にはログ出力を指定して起動します。

# 接続時のログを確認する場合には、パラメーターを指定して起動します
$ docker run \
  --platform linux/amd64 \
  -p 18080:80 \
  -e GUNICORN_CMD_ARGS="--access-logfile - --error-logfile -" \
  kennethreitz/httpbin
  

こうすると以下のように接続時のログ出力が確認できます。

[2025-09-30 14:08:33 +0000] [1] [INFO] Starting gunicorn 19.9.0
[2025-09-30 14:08:33 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
[2025-09-30 14:08:33 +0000] [1] [INFO] Using worker: gevent
[2025-09-30 14:08:33 +0000] [8] [INFO] Booting worker with pid: 8
192.168.65.1 - - [30/Sep/2025:14:08:40 +0000] "GET /uuid HTTP/1.1" 200 53 "-" "curl/8.7.1"
192.168.65.1 - - [30/Sep/2025:14:08:42 +0000] "GET /uuid HTTP/1.1" 200 53 "-" "curl/8.7.1"


便利な使い方

https://httpbin.org/ では swaggerでのドキュメントが公開されています。
コマンドの実行やcurlでの実行方法を調べることが出来ます。素敵ですね!!! 👍


以降は、私が利用する事がある機能を一部紹介します。

便利1.任意のstatusを返す

任意のhttps statusを返してくれます、一般的でないもの(例えば399等)も返してくれます。

$ curl -s http://localhost:18080/status/399 -o /dev/null -s -w "%{http_code}\n"
399

http statusの意味を調べたい場合には、以下のhttp.catを併用しましょう。
https://http.cat/status/202

便利2.リクエストデータの内容を返す

headers, ip, user-agentが利用できます。

$ curl -s http://localhost:18080/ip | jq -r '.origin'
192.168.65.1
便利3.数秒遅れてから返す
$ time curl -s http://localhost:18080/delay/10 -o /dev/null
________________________________________________________
Executed in   10.05 secs      fish           external
   usr time    9.40 millis    0.36 millis    9.04 millis
   sys time   19.93 millis    2.55 millis   17.39 millis
便利4.画像データを返す

jpeg, png, svg, webp の画像が利用できます。※画像の中身は素晴らしい犬のようです。

curl -s http://localhost:18080/image/jpeg -H "accept: image/jpeg" -o temp.jpeg
okuno@HWGQW2T6FY ~/w/hacomono-jenkins (main)
> file temp.jpeg
temp.jpeg: JPEG image data, JFIF standard 1.01, resolution (DPCM), density 28x28, segment length 16, comment: "Edited by Paul Sherman for WPClipart, Public Domain", baseline, precision 8, 239x178, components 3


便利5.リダイレクトする

各メソッドのリダイレクトや数秒遅れてのリダイレクト等が利用できます。

curl -I http://localhost:18080/redirect-to?url=https%3A%2F%2Fexample.com%2F&status_code=302
HTTP/1.1 302 FOUND
Server: gunicorn/19.9.0
Date: Wed, 01 Oct 2025 00:58:28 GMT
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Content-Length: 0
Location: https://example.com/
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true


類似のアプリケーション

類似するものとしては Postman EchoReqRes.in 等があるようです。
Postman Echoの利用例

# **Postman Echoを利用してip addressを確認する**
$ curl -s https://postman-echo.com/ip | jq -r '.ip'
123.123.123.123

RegRes.inの利用例

# RegResを利用してユーザーを取得する
$ curl -s \
       -H "x-api-key: ${X_API_KEY}" \
       https://reqres.in/api/users/1 | jq -r '.data.first_name'
George


まとめ

いかがでしたでしょうか。今回紹介した以外にも、httpbinと同等の機能を有したツールが沢山ありますので、自身のローカル環境(mac/windows/etc)、ツールのインスールが出来ない本番環境、利用可能な開発言語や実行環境に合わせて最適なものを選んで頂ければと思います。
皆様の打鍵力向上や再確認の手助けになれば幸いです。



💁 関連記事