1. ホーム
  2. http

[解決済み] 2つのcurlリクエストの間でクッキーを保存する

2022-11-17 06:59:19

質問

を使うことは知っています。 cURL を使うと、受け取ったクッキーやヘッダを見ることができます。

curl --head www.google.com

そして、リクエストにヘッダを追加するには

curl --cookie "Key=Value" www.google.com

私は現在、永続的なクッキーを必要とする問題のテストに取り組んでおり、たくさんのクッキーが存在する可能性があります。

どのようにすれば効率的に2つの cURL リクエストの間でクッキーを効率的に保存するにはどうしたらよいでしょうか?

可能であれば、一時ファイルを保存に使用します。

どのように解決するのですか?

を使用します。 --cookie-jar または --dump-header パラメータを使用すると、受信したクッキーをファイルに保存することができます。このパラメータは --cookie パラメータは、後でそのファイルからクッキーを読み出すことができます。

-b, --cookie <name=data>

(HTTP)HTTPサーバーにデータをクッキーとして渡します。これは、以前サーバから "Set-Cookie:" 行で受け取ったデータだと思われます。データは "NAME1=VALUE1; NAME2=VALUE2" のような形式であることが必要です。

行に'='記号が使われていない場合、それは以前に保存されたクッキー行を読み込むために使用するファイル名として扱われ、そのファイル名は から以前に保存されたクッキー行を読み取るために使われるファイル名として扱われます。このメソッドを使用すると、curl が受信した Cookie を記録する Cookie エンジンも有効になります。これは、-L、-location オプションと組み合わせて使用する場合に便利です。Cookie を読み込むファイルの形式は、プレーン HTTP ヘッダー (Set-Cookie 形式) または Netscape/Mozilla の Cookie ファイル形式である必要があります。

b, --cookie で指定されたファイルは、入力としてのみ使用されます。このファイルには、クッキーは書き込まれません。 クッキーを保存するには、-c, --cookie-jar オプションを使用します。 .

このオプションを使用する場合は注意が必要で、複数の転送が発生する可能性があります。NAME1=VALUE1; 形式を使用するか、またはファイルで Set-Cookie 形式を使用してドメインを指定しない場合、Cookie は任意のドメインに対して送信され (リダイレクトが行われた後でも)、サーバーが設定した Cookie によって変更されることはありません。クッキーエンジンが有効で、あるサーバーが同じ名前のクッキーを設定した場合、そのサーバーへの将来の転送で両方が送信され、おそらくあなたが意図したものではありません。これらの問題に対処するには、Set-Cookieにドメインを設定するか(そうすることでサブドメインを含むようになります)、Netscapeの形式を使用します。

このオプションが複数回使用された場合、最後のものが使用されます。

<ブロッククオート

-c, --cookie-jar <ファイル名>

(HTTP) 操作の完了後、curl にすべてのクッキーを書き込ませたいファイルを指定します。 Curlは指定されたファイルから以前に読み込んだすべてのクッキーと、リモートサーバから受信したすべてのクッキーを書き込みます。 . クッキーが知られていない場合、データは書き込まれません。ファイルは、Netscape のクッキー ファイル フォーマットを使用して書き込まれます。ファイル名を1つのダッシュ、"-"に設定すると、クッキーは標準出力に書き出されます。

このコマンドラインオプションは、curl が Cookie を記録して使用するようにする Cookie エンジンを有効にします。これを有効にする別の方法は、-b、-cookie オプションを使用することです。

Cookie jar を作成または書き込むことができない場合、curl 操作全体が失敗することはなく、エラーを明確に報告することさえあります。v を使用すると警告が表示されますが、この致命的な可能性のある状況について得られる目に見えるフィードバックはこれだけです。

7.43.0 以降、ドメイン名なしで Set-Cookie 形式でインポートされた Cookie は、このオプションではエクスポートされません。

このオプションが複数回使用された場合、最後に指定されたファイル名が使用されます。

<ブロッククオート

-D, --dump-header <file>

プロトコルヘッダを指定されたファイルに書き出す。

このオプションは、HTTP サイトが送信するヘッダを保存したいときに使うと便利です。ヘッダからクッキーを読み取るには、-b, --cookie オプションを使用して、2 回目の curl を起動する必要があります。c, --cookie-jar オプションは、クッキーを保存するためのより良い方法です。 .

FTPで使用する場合、FTPサーバの応答行は"headers"と見なされるため、そこに保存されます。

このオプションが複数回使用された場合、最後に使用されたものが使用されます。

また、コマンドラインの cURL アプリ を使用するコードを書いてください。 libCurl ライブラリ . libCurl は HTTP クッキーに関連するいくつかの機能を備えています。

のオプション curl_easy_getinfo() :

のオプション curl_easy_setopt() :

そうすれば、クッキーを好きなように保存し、後のHTTPセッションに必要に応じて割り当てることができます。