ブログに戻ります

curl クッキー: セッションを安全に送信、保存、再利用する方法

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

21-Aug-2026

TL;DR:

  • curlクッキーは-bで直接送信できますが、クッキージャーはマルチリクエストセッションに対して安全です。 ジャーはcurlによって有効期限、ドメイン、パス、トランスポートルールを適用させることができ、Cookieヘッダーを手動で再構築する必要がありません。
  • -cSet-Cookieから受け取ったクッキーを書き込み、-bは次のリクエストのためにクッキーを読み取ります。 スクリプトが同じジャーを更新して再利用しなければならない場合は、両方のオプションを使用してください。
  • クッキーファイルは資格情報です。 ソース管理の外に保管し、ファイルの権限を制限し、ログから値を伏せ、許可されたワークフローが終了したら削除してください。
  • curlはクライアントサイドのJavaScriptを実行したり、インタラクティブなMFAやパスキー儀式を完了したりしません。 それらのフローには承認されたブラウザセッションと人間が制御する認証境界が必要です。
  • Scrapeless Scraping Browserは、curlがその制限に達した後もブラウザ専用のワークフローを続けることができます。 それは新鮮なクラウドブラウザセッションを提供します; あなたのアプリケーションは依然として認証と資格情報の処理を所有しています。
  • 開始は無料です。 新しいScrapelessアカウントには無料のScraping Browserランタイムが含まれています—app.scrapeless.comでサインアップしてください。

はじめに: クッキーは別々のHTTPリクエストをセッションに変える

HTTPリクエストは、サーバーとクライアントが状態に同意するまで独立しています。レスポンスはクッキーを設定でき、その後のリクエストはそのクッキーを一致するホストとパスに返すことができます。その小さな交換は、多くのアプリケーションが好み、匿名カート、同意状態、および認可されたセッションを保持する方法です。

curlには、この仕事のためのクッキーエンジンが含まれています。 公式curl HTTPスクリプティングガイド は、リテラルクッキーストリングと永続的ジャーの両方を文書化しており、HTTPステート管理仕様 は、それらの背後にあるサーバーとユーザーエージェントの動作を定義しています。

このガイドは、パブリックテストエンドポイントとcurl 8.7.1を使用して、非敏感なデモクッキーを送信、キャッチ、保存、検査、再利用します。その後、HTTPセッションとブラウザ専用認証の間の明確な境界を引きます。


curlクッキーとは?

curlクッキーは、curlがHTTP Cookieリクエストヘッダーに配置する名前-値ペアで、その際にクッキーエンジンのルールを適用します。

提供する方法は2つあります:

方法 最適なフィット 主なトレードオフ
--cookie / -bを使用したリテラル文字列 知られている非敏感な値を持つ1つの制御されたリクエスト あなたはすべての値とマッチング決定を所有します
--cookie / -bを使用したクッキーファイル コマンド間で持ち運ばれるセッション ファイルは資格情報の素材になります
--cookie-jar / -cを使用して書き込まれるクッキージャー サーバー駆動のマルチステップフロー ジャーは保護され、クリーンアップされる必要があります

レスポンスの方向は異なります。サーバーはSet-Cookieを送信し、curlは属性を評価し、メモリまたはジャーに適格なクッキーを記録します。 Set-Cookieヘッダーリファレンスは、DomainPathExpiresMax-AgeSecureHttpOnly、およびSameSiteなどの属性を説明します。


-bでクッキーを送信する

-b--cookieの短縮形です。引数に等号が含まれている場合、curlはその値をファイル名ではなくクッキーデータとして扱います。

bash Copy
curl --silent \
  --cookie "theme=dark; view=compact" \
  https://httpbingo.org/cookies

公開エンドポイントは、受け取ったクッキーをエコーします:

json Copy
{
  "cookies": {
    "theme": "dark",
    "view": "compact"
  }
}

リテラル値は無害な好みに便利です。共有コマンドラインに実際のセッション識別子を置かないでください:シェル履歴、プロセス検査、ターミナル録音、およびCIログはすべてそれを暴露する可能性があります。


Set-Cookieを読み取る 〜 ボディに混ぜない

Set-Cookieはレスポンスヘッダーなので、レスポンスボディとは別に調べてください。 --dump-header -はヘッダーを標準出力に書き込み、--output /dev/nullはボディを破棄します。

bash Copy
curl --silent \
  --dump-header - \
  --output /dev/null \
  "https://httpbingo.org/cookies/set?theme=dark"

ライブレスポンスはHTTPリダイレクトとこのヘッダーを返しました:

text Copy
set-cookie: theme=dark; Path=/; HttpOnly; Secure

HttpOnlyはブラウザのJavaScriptが値を読むのを防ぎます; HTTPクライアントがクッキーを保存し送信するのを止めることはありません。 Secureは、安全なトランスポートに伝送を制限します。どちらの属性もクッキーを権限付与に変えることはありません—サーバーはセッションが何にアクセスできるかをまだ決定します。


クッキージャーを書き込み再利用する

クッキージャーは、サーバーの属性をNetscapeクッキーファイル形式で保持します。状態を設定するレスポンスに-cを使用し、必要なリクエストには-bを使用します。

bash Copy
COOKIE_JAR="$(mktemp)"
chmod 600 "$COOKIE_JAR"

curl --silent --location \
  --cookie-jar "$COOKIE_JAR" \
  "https://httpbingo.org/cookies/set?demo_session=authorized" \
  --output /dev/null

curl --silent \
  --cookie "$COOKIE_JAR" \
  https://httpbingo.org/cookies

2つ目のコマンドは以下を返しました:

json Copy
{
  "cookies": {
    "demo_session": "authorized"
  }
}

サーバーがセッションを更新できる場合、同じファイルを読み書きします:

bash Copy
curl --silent --location \
  --cookie "$COOKIE_JAR" \
  --cookie-jar "$COOKIE_JAR" \
  https://httpbingo.org/cookies

転送が完了するとジャーが書き込まれます。プライベートファイルシステムに保管し、許可された作業が終了したら削除してください。

Scrapelessでスクレイピングを開始する

Scrapelessでウェブスクレイピングと自動化のワークフローを強化しましょう!
今日サインアップすると、$5の無料クレジットが得られます — クレジットカードは不要です

今すぐScrapeless Dashboardで無料クレジットを請求しましょう。
Scrapeless Dashboard showing $5.00 in Team Credits


複数のクッキーとドメイン/パスルール

クッキーエンジンは、リクエストに一致するスコープのクッキーのみを送信します。ジャーラインには、ドメイン、サブドメインの有無、パス、セキュアフラグ、期限、名前、および値が記録されます。

キャプチャされたパブリックテストクッキーはこのようなものでした:

text Copy
#HttpOnly_httpbingo.org FALSE / TRUE 0 demo_session authorized

#HttpOnly_プレフィックスは、HttpOnlyクッキーのためのcurlのファイルフォーマットマーカーです。FALSEはドメインがサブドメインを含まないことを意味し、/は一致するパス、TRUEはセキュアトランスポートをマークし、0は永続的な期限タイムスタンプを持たないセッションクッキーを表します。

リクエストを機能させるためにドメインやパスを広げないでください。スコープはセキュリティ境界です。一つのアプリケーションホストのクッキーは、無関係なホストにコピーされるべきではなく、パス制限のあるクッキーはパス制限のままであるべきです。


セキュア、HttpOnly、SameSite

クッキー属性は異なる質問に答えるため、独立して扱います。

属性 制御する内容 curlの意味
Secure クッキーがセキュアトランスポートを通過するかどうか curlはプレーンHTTPで送信しません
HttpOnly ブラウザのJavaScriptがそれを読み取れるかどうか curlはジャー内のマーカーを保持します
SameSite ブラウザがクロスサイトコンテキストでそれを送信するかどうか コマンドラインHTTPクライアントはブラウザの完全なサイトコンテキストモデルを再現しません
Domain どのホストスコープが受信できるか curlはリクエストホストと一致
Path どのURLパスが受信できるか curlはリクエストパスと一致

認可されたセッションについては、OWASPセッション管理コントロールに従ってください:識別子を静止および移動中に保護し、アプリケーションを通じてそれらをローテーションし、サーバー側で終了を有効にします。


クッキーヘッダーを漏らさずにデバッグする

--verboseは、Cookieを含む送信リクエストヘッダーを表示します。これにより、便利ですが危険です。

冗長な出力は、デモ値を持つプライベートローカルターミナルでのみ使用してください。共有ログでは、値を伏せる際にジャーから名前とスコープを確認します:

bash Copy
awk 'BEGIN { FS="\t" } !/^#/ && NF >= 7 { print $1, $3, $6, "[REDACTED]" }' "$COOKIE_JAR"

サーバーが401を返した場合、まずcurlがホストとパスのために期待されたクッキーを選択したことを確認してください。サーバーが403を返した場合、そのセッションは認証されていますが、そのリソースに対して許可されていない可能性があります。どちらの状態もアカウントスコープの変更や他のユーザーのセッションをコピーすることを正当化しません。


curlだけでは不十分な場合

curlはHTTPクライアントであり、ブラウザランタイムではありません。クライアント側のJavaScriptを実行したり、ログインウィジェットをレンダリングしたり、パスキーセレモニーを満たしたり、MFAプロンプトを承認することはできません。

ブラウザ専用のフローは、クッキーを超えた状態にも依存します:オリジンストレージ、サービスワーカー、JavaScript生成リクエスト、デバイスにバインドされた認証情報、インタラクティブリダイレクトなどです。したがって、Cookieヘッダーのみを再構築することは、不完全または無効なセッションを生成する可能性があります。

ドキュメント化されたHTTPフローと制御されたAPIにはcurlを使用してください。アプリケーションがブラウザの動作を要求する場合は、承認されたブラウザセッションを使用してください。


Scrapelessでワークフローを続行する

Scrapeless Scraping Browserは、JavaScriptでレンダリングされたインタラクティブなワークフローのためのクラウドブラウザを提供します。承認されていないcurlクッキーをアクセスに変換することはありません。

安全なハンドオフは新しいセッションです:クラウドブラウザを作成し、承認されたオペレーターが必要なログインやMFA境界を完了させ、そのセッション内で承認された作業を維持します。正確なSDK接続には、あなたのScrapeless APIキーが必要です。

注:以下のブロックにはSCRAPELESS_API_KEYと承認されたターゲットが必要です。ローカル検証環境はインストールされたSDKインターフェースを確認しましたが、認証されたクラウドセッションは実行しませんでした。

javascript Copy
import { Playwright } from "@scrapeless-ai/sdk";

const browser = await Playwright.connect({
  apiKey: process.env.SCRAPELESS_API_KEY,
  sessionTTL: 300,
  proxyCountry: "US",
});

const context = await browser.newContext();
const page = await context.newPage();
await page.goto("https://app.example.com/login", {
  waitUntil: "domcontentloaded",
});

// An authorized operator completes any login, MFA, or passkey step here.
// Continue only within the account and scope approved for the workflow.

await browser.close();

Scrapeless Scraping Browser ページでは、管理されたブラウザの境界について説明しています。Scrapelessの料金を確認し、SDKをScrapelessドキュメントと一致させ、ブラウザがHTTPレスポンスボディではなくファイルを生成しなければならない場合は、Puppeteerダウンロードワークフローを使用してください。


結論: セッション状態は意図的に保つ

curlクッキーは、フローを受信、保存、一致、送信、および破棄に分けると予測可能です。-cを使用してサーバー状態をキャプチャし、-bを使用して再利用し、複数のコマンドが参加する場合はプライベートジャーを使用します。

ワークフローがJavaScript、インタラクティブな認証、またはブラウザにバインドされた資格情報に移行すると、セッションをヘッダーエクササイズとして扱うのをやめてください。承認されたブラウザセッションを作成し、そのスコープを明示的に保ってください。


より安全なブラウザワークフローを構築する準備はできていますか?

認可された自動化を構築している開発者とセッション処理パターンを比較するために、コミュニティに参加してください: Discord · Telegram

app.scrapeless.comにサインアップして、無料のScraping Browserランタイムを取得し、ブラウザ専用のステップを管理されたセッションに移動させましょう。


FAQ

Q: curl -bは何をしますか?

curl -bはクッキーエンジンを有効にし、要求のためにリテラルクッキーストリングまたはクッキーファイルのいずれかを供給します。

Q: curl -cは何をしますか?

curl -cは、転送が完了する際に適格なクッキーをクッキージャーに書き込みます。同じファイルを読み取り、更新しなければならない場合は、-bと組み合わせて使用します。

Q: curlクッキージャーをコミットすることは安全ですか?

いいえ。クッキージャーにはアクティブなセッション資格情報が含まれる可能性があり、制限的なファイルシステムの権限でソース管理の外に留まるべきです。

Q: なぜcurlはジャーからクッキーを送信しないのですか?

クッキーが期限切れであるか、リクエストのドメイン、パス、またはセキュアトランスポート要件に一致しない可能性があります。それらの属性を印刷することなく検査してください。

Q: curlはMFAまたはパスキーログインを完了できますか?

いいえ。インタラクティブMFAおよびパスキーの儀式にはブラウザが必要であり、しばしばそのステップを承認する認可された人物が必要です。

Q: Scrapelessはすべてのcurlクッキージャーをインポートできますか?

いいえ。ブラウザセッションはクッキー以上のものに依存する可能性があるため、安全な一般的パターンは、新しい承認されたブラウザセッションを開始し、その中で必要な認証を完了することです。

Q: セッションワークフローはどれくらいの同時実行性を使用するべきですか?

アプリケーションの所有者が異なる制限を承認するまで、ホストあたり3人のワーカーを超えないようにし、各ワーカーのセッション状態を隔離してください。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ