← ブログ一覧に戻る

curlでリダイレクトを追従する正しい方法

2025年11月13日

はじめに

GASのようにリダイレクト(302)を返すAPIをテストする際、curlコマンドの使い方を間違えると、 POSTメソッドがGETに変わってしまったり、リクエストボディが失われたりする問題が発生します。

この記事では、実際に遭遇した問題と、正しい解決方法を詳しく解説します。

問題:POSTがGETに変わる

以下のようなコマンドを実行すると、一見正しそうに見えますが問題があります:

# ❌ 間違った例
curl -X POST -L \
  -H "Content-Type: application/json" \
  -d '{"key": "value"}' \
  "https://script.google.com/macros/s/.../exec"

-L(リダイレクト追従)と-X POSTを同時に使うと、 リダイレクト先でもPOSTメソッドを強制しようとしますが、 一部のケースでHTTPの仕様に従ってGETに変換されてしまいます。

解決方法

正しい方法は、-X POSTを付けずに、-d だけを指定することです:

# ✅ 正しい例
curl -L \
  -H "Content-Type: application/json" \
  -d '{"key": "value"}' \
  "https://script.google.com/macros/s/.../exec"

なぜこれで動くのか?

curlは-dオプションが指定されると、自動的にPOSTメソッドを使用します。

-X POSTを明示的に指定すると、リダイレクト後も強制的にPOSTを使おうとして 問題が発生しますが、-dだけの場合はHTTPの仕様に従って適切に処理されます。

実践例:LINE Webhookのテスト

LINE Messaging APIのWebhook形式でGASをテストする場合:

curl -L \
  -H "Content-Type: application/json" \
  -d '{
    "events": [
      {
        "type": "message",
        "replyToken": "dummyReplyToken",
        "source": {
          "userId": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
          "type": "user"
        },
        "timestamp": 1731465600000,
        "message": {
          "id": "1234567890",
          "type": "text",
          "text": "テストメッセージ"
        }
      }
    ]
  }' \
  "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec"

curlオプションまとめ

オプション説明
-Lリダイレクトを追従する
-dPOSTデータを送信(自動的にPOSTメソッドになる)
-HHTTPヘッダーを指定
-X POSTメソッドを明示的に指定
⚠️ -L との併用は避ける
-v詳細なログを表示(デバッグ用)

デバッグのコツ

リダイレクトの挙動を確認したい場合は、-v(verbose)オプションを追加します:

curl -v -L \
  -H "Content-Type: application/json" \
  -d '{"key": "value"}' \
  "https://script.google.com/macros/s/.../exec"

これにより、以下の情報が表示されます:

  • リダイレクトのステータスコード(302)
  • リダイレクト先のURL
  • 各リクエストのメソッド
  • 送受信したヘッダー

しかし、本番環境では...

curlではリダイレクトに対応できても、LINE Webhookなどのシステムはリダイレクトをサポートしていません

そのため、本番環境ではWebhook Proxy Serviceのような中継サービスが必要になります。

Webhook Proxy Serviceの利点

  • リダイレクトを自動的に処理
  • 常に200ステータスを返すため、Webhookシステムと互換性が高い
  • あらゆるHTTPメソッドに対応
  • セットアップが簡単(API Keyを取得するだけ)

まとめ

  • -X POST-Lの同時使用は避ける
  • POSTデータを送る場合は-dだけで十分
  • デバッグには-vオプションが便利
  • 本番のWebhookにはリダイレクト対応の中継サービスを使う

Webhook Proxy Serviceを試す

無料でAPI Keyを取得して、今すぐ使い始められます。

ダッシュボードへ →