curlコマンドでcookieを保存、送信する方法
目次
スポンサードリンク
この記事では、curlコマンドでcookieを保存、送信する方法を紹介します。Webサイトのログイン機能などのデバッグで活用できるテクニックです。
Webサイトにリクエストする際、サーバー側がクライアント(ブラウザ)を識別するための仕組みがcookieです。 cookieはクライアント上に保存されるテキストファイルでクライアントを識別するためのIDなどが保存されています。Webサイトのログイン機能などで利用される仕組みです。
cookieを保存する方法
curlコマンドでは、-cオプションを使うことでcookie情報をファイルに保存することができます。下記コマンドは、カレントディレクトリに cookie.txt というファイルを作成し、https://store.google.com/JP/ にアクセスした際のレスポンスヘッダー「set-cookie」の内容を保存します。
curl -c cookie.txt https://store.google.com/JP/
実際に手元の環境で実行してみると、cookie.txtに情報が保存されていることを確認できました。cookieでは、cookieが有効なドメインや有効なパス、cookieの名前と値、有効期限などが保存されています。
[root@hostname tmp]# curl -c cookie.txt https://store.google.com/JP/
[root@hostname tmp]#
[root@hostname tmp]# cat cookie.txt
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
#HttpOnly_.google.com TRUE / FALSE 1740055247 NID 516=sCnJrdNiaMTAxDXrglmxVgbX1_2wHbmXOSSiGYrlx24D-fICyIPuIw43Hx4-qy30R7GmDU-MMJet48TgUKPD28CMURkMmSG9KMAYUADZ0r_ZxvcWS9KBgeGdWbr6OItVYBIMh0ez4x2ekJIDWEiWP_j2kUuCQXCUN1Hr57gjh-w
cookieを送信する方法
cookieを送信する際は、–bオプションを使用します。下記コマンドは-cオプションと-bオプションで同じファイル名を指定することで、cookieの送信と保存を同時に実行しています。
curl -c cookie.txt -b cookie.txt https://store.google.com/JP/
試しに、ヘッダー情報を出力する -vオプション付けて実行してみます。Cookieヘッダーでcookie.txtに保存してあった情報が送信されていることが確認できます。
[root@hostname tmp]# curl -v -c cookie.txt -b cookie.txt https://store.google.com/JP/
* About to connect() to store.google.com port 443 (#0)
* Trying 142.250.207.14...
* Connected to store.google.com (142.250.207.14) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: CN=*.google.com
* start date: Jul 30 12:32:53 2024 GMT
* expire date: Oct 22 12:32:52 2024 GMT
* common name: *.google.com
* issuer: CN=WR2,O=Google Trust Services,C=US
> GET /JP/ HTTP/1.1
> User-Agent: curl/7.29.0
> Host: store.google.com
> Accept: */*
> Cookie: NID=516=sCnJrdNiaMTAxDXrglmxVgbX1_2wHbmXOSSiGYrlx24D-fICyIPuIw43Hx4-qy30R7GmDU-MMJet48TgUKPD28CMURkMmSG9KMAYUADZ0r_ZxvcWS9KBgeGdWbr6OItVYBIMh0ez4x2ekJIDWEiWP_j2kUuCQXCUN1Hr57gjh-w
>
< HTTP/1.1 302 Found
< Content-Type: application/binary
< Vary: Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: Mon, 01 Jan 1990 00:00:00 GMT
< Date: Wed, 21 Aug 2024 12:44:27 GMT
< Location: https://store.google.com/JP/?hl=ja
< Strict-Transport-Security: max-age=31536000
< Cross-Origin-Opener-Policy: unsafe-none
< Content-Security-Policy: script-src 'nonce-t5jCGn3P644fOt18lkc8gA' 'unsafe-inline' 'unsafe-eval';object-src 'none';base-uri 'self';report-uri /_/Gstore/cspreport;worker-src 'self' blob:
< Accept-CH: Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, Sec-CH-UA-WoW64, Sec-CH-UA-Form-Factors, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version
< Cross-Origin-Resource-Policy: same-site
< Permissions-Policy: ch-ua-arch=*, ch-ua-bitness=*, ch-ua-full-version=*, ch-ua-full-version-list=*, ch-ua-model=*, ch-ua-wow64=*, ch-ua-form-factors=*, ch-ua-platform=*, ch-ua-platform-version=*
< Content-Security-Policy-Report-Only: require-trusted-types-for 'script';report-uri /_/Gstore/cspreport
< Server: ESF
< Content-Length: 0
< X-XSS-Protection: 0
< X-Frame-Options: SAMEORIGIN
< X-Content-Type-Options: nosniff
< Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
<
* Connection #0 to host store.google.com left intact
関連記事
wgetコマンドでcookieを保存、送信する方法
Linuxコマンドについて学べるおすすめ書籍
Linuxコマンドの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。
Linux教科書 図解でパッとわかる LPIC/LinuC
はじめてLPICを受ける方向け、手を動かしながらLinuxについて学びたい方におすすめ。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。
Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】
Search
Recent Posts
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)