web-dev-qa-db-ja.com

2つのcurlリクエスト間でCookieを保存します

cURLを使用すると、受信したCookie /ヘッダーを見ることができます。

curl --head www.google.com

そして、私は私のリクエストにヘッダーを追加できることを知っています

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

現在、永続的なCookieを必要とする問題のテストに取り組んでおり、多くの問題が発生する可能性があります。

2つのcURLリクエスト間でCookieを効率的に保存するにはどうすればよいですか?

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

44
Matt Clark

_--cookie-jar_または_--dump-header_パラメーターを使用して、受信したCookieをファイルに保存します。 _--cookie_パラメーターは、後でそのファイルからCookieを読み戻すことができます。

-b、-cookie <name = data>

(HTTP)データをCookieとしてHTTPサーバーに渡します。これは、以前に「Set-Cookie:」行でサーバーから受信したデータと思われます。データは「NAME1 = VALUE1; NAME2 = VALUE2」の形式である必要があります。

行に「=」記号が使用されていない場合、以前に保存されたCookie行をから読み取るために使用するファイル名として扱われますこのセッションで一致する場合。この方法を使用すると、Cookieエンジンもアクティブになり、カールレコードの着信Cookieも作成されます。これは、-L、--locationオプションと組み合わせて使用​​する場合に便利です。 Cookieを読み取るファイルのファイル形式は、プレーンHTTPヘッダー(Set-Cookieスタイル)またはNetscape/Mozilla Cookieファイル形式である必要があります。

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

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

このオプションを複数回使用すると、最後のオプションが使用されます。

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

(HTTP)操作の完了後にcurlがすべてのCookieを書き込むファイルを指定します。 Curlは、以前に指定されたファイルから読み取られたすべてのCookieと、リモートサーバーから受信されたすべてのCookieを書き込みます。 Cookieが不明な場合、データは書き込まれません。ファイルは、Netscape Cookieファイル形式を使用して書き込まれます。ファイル名を単一のダッシュ「-」に設定すると、Cookieはstdoutに書き込まれます。

このコマンドラインオプションは、カールを記録し、Cookieを使用するCookieエンジンをアクティブにします。有効にする別の方法は、-b、-cookieオプションを使用することです。

Cookie jarを作成または書き込みできない場合、curl操作全体が失敗したり、エラーを明確に報告したりすることはありません。 -vを使用すると警告が表示されますが、これが致命的な状況について得られる唯一のフィードバックです。

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

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

-D、-dump-header <ファイル>

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

このオプションは、HTTPサイトから送信されるヘッダーを保存する場合に便利です。ヘッダーからのCookieは、-b、--cookieオプションを使用して、2回目のcurl呼び出しで読み取ることができます! -c、-cookie-jarオプションは、Cookieを保存するためのより良い方法です。

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

このオプションを複数回使用すると、最後のオプションが使用されます

または、コマンドライン cURL app を使用する代わりに、 libCurlライブラリ を使用するコードを記述します。これにより、Cookie処理をより直接制御できます。 libCurlには、HTTP Cookieに関連するいくつかの機能があります。

curl_easy_getinfo()のオプション:

curl_easy_setopt()のオプション:

その後、必要に応じてCookieを保存し、必要に応じて後のHTTPセッションに割り当てることができます。

64
Remy Lebeau

curl -b cookie.txt -c cookie.txt <url> または curl --cookie cookie.txt --cookie-jar cookie.txt <url>は、保存されたCookieを保存および送信します。

3
dw1