
HTTPリクエストを他人に共有するときはcurlコマンド形式にするとめちゃくちゃ捗る
こんにちは、リテールアプリ共創部マッハチームの morimorikochanです。
HTTPリクエストを誰かに共有すること、よくありますよね。今回はそんなときにcurlコマンドで共有すると自分も相手もめちゃくちゃ捗るので使っていきましょう、という話を書きたいと思います。
みんな知ってるかもな〜と思いつつ、誰かの役に立てば嬉しいです...🔥
curlとは?
curlは、コマンドラインからHTTPリクエストを送信できるツールです。例えば、以下のようなコマンドでWebサイトにアクセスできます。
また、オプションも豊富でPOSTリクエストの送信、ヘッダーの追加、レスポンスの保存など、多彩な操作が可能です。
$ curl http://example.com
<!doctype html><html lang="en"><head><title>Example Domain</title><meta name="viewport" content="width=device-width, initial-scale=1"><style>body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}h1{font-size:1.5em}div{opacity:0.8}a:link,a:visited{color:#348}</style><body><div><h1>Example Domain</h1><p>This domain is for use in documentation examples without needing permission. Avoid use in operations.<p><a href="https://iana.org/domains/example">Learn more</a></div></body></html>
curlコマンドで共有すると何が捗る?
1.再現性が高い
Windows、Mac、Linux、どのOSでも同じコマンドでHTTPリクエストを再現できるため、共有する相手が異なる環境を使っていても同じリクエストを確実に実行できます。
※厳密には、windowsのコマンドプロンプトではシングルクオーテーションが使えない、などの多少の差分はあると思いますが...
2.リクエスト内容が明確
curlコマンドにはHTTPリクエストの全情報が含まれているので、curlコマンドを見ればどのようなヘッダーやパラメータが設定されているかが一目瞭然です。口頭や文章で説明するよりも正確に情報を伝えられます。
3.各種APIクライアントでインポートできる
有名なAPIクライアントはcurlコマンドのインポートに対応しています。
- Postman
- サイドバーの
Import
からできるみたいです(未検証)
- サイドバーの
- Insomnia
- URL入力部分にcurlコマンドをペーストすると自動でインポートされます(未検証)
- 私はInsomniaからforkされたオフライン動作バージョンであるInsomniumを使っていますが、同様にインポートできます
- URL入力部分にcurlコマンドをペーストすると自動でインポートされます(未検証)
どういう時に捗る?
1.APIの意図しない挙動を誰かに相談するとき
同じチームのバックエンドエンジニアやAPI提供企業の担当者に「このAPIの挙動がおかしいんだけど...」と相談するとき、curlコマンドを共有すれば相手が即座に同じリクエストを何度も再現できます。また、再現できるため問題発生時のログも何度も出力しやすく、問題の調査工数が大幅に下がります。
また、curlコマンドにはHTTPリクエストの全情報が載っているため、相手と挙動が違うときは自身のプライベートネットワーク内の障害やPCの問題など、環境依存かどうかも切り分けやすいです。
2.API開発の成果物として
API開発時のPull Requestのコメントにcurlコマンドを貼っておけば、レビュワーが簡単にAPIの動作を確認できます。
いちちDEV環境から認証情報やパラメータをかき集める必要がないので、レビュワーの負担がめちゃくちゃ減ります。
どうやって取得する?
Chrome DevToolsを使う方法
Chromeの場合は、以下の方法で可能です
- Chrome DevToolsを開く
- Networkタブを開く
- 該当のリクエストを右クリック
- 「Copy」→「Copy as cURL」を選択
この操作で取得できるcurlコマンドはこんな感じです。(このコマンドでは弊社HPの企業情報ページを取得しています)
curl 'https://classmethod.jp/company/' \
-H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \
-H 'accept-language: ja,en-US;q=0.9,en;q=0.8' \
-H 'cache-control: no-cache' \
-b '{長いので省略}' \
-H 'pragma: no-cache' \
-H 'priority: u=0, i' \
-H 'referer: https://classmethod.jp/' \
-H 'sec-ch-ua: "Google Chrome";v="141", "Not?A_Brand";v="8", "Chromium";v="141"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
-H 'sec-fetch-dest: document' \
-H 'sec-fetch-mode: navigate' \
-H 'sec-fetch-site: same-origin' \
-H 'sec-fetch-user: ?1' \
-H 'upgrade-insecure-requests: 1' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36'
その他のツールで取得する方法
- Postmanの場合はこちら
- Insomniaの場合はこちら
- Flutter DevToolsの場合はこちら
- 調べて初めて知りました。まさかFlutter DevToolsでもできるなんて思ってなかったです...
注意点
curlコマンドをエクスポートすると、認証情報や個人情報などセンシティブな情報が含まれている可能性があります。
認証情報だとBearerトークンやCookie、個人情報だとユーザーの氏名・住所などが該当します。
なので、SlackやGitHubのコメントに貼っても問題がない情報かどうか必ず都度確認し、必要があればマスクしてから共有することを徹底しましょう。