curlを使ってsession_cookieを変数として取得し、ログイン必須のファイルをダウンロードする方法
はじめに
ウェブ上のファイルをcurlを使ってダウンロードする際、多くのサイトではログインが必要です。本記事では、curlを使ってsession_cookieを取得し、そのcookieを使用してログイン必須のファイルをダウンロードする方法を解説します。
必要な準備
-
curlのインストール: ほとんどのUnix系OSではデフォルトでインストールされています。
curl --version
で確認できます。 - ターゲットサイトの確認: どのような認証方式を使っているかを事前に確認しておきましょう。
1. session_cookieの取得
まず、curlを使ってサイトにログインし、session_cookieを取得します。
COOKIE=$(curl -s -d 'username=<実際のusername>&password=<実際のpassword>' -c - -X POST https://example.com/login)
-
-c -
: 取得したcookieを変数として保存します。 -
-d
: POSTリクエストで送信するデータを指定します。 -
-X POST
: POSTリクエストを指定します。
注意点: ログインフォームのパラメータ名(username
やpassword
)はサイトごとに異なるので、適宜修正してください。
2. COOKIEを使ってファイルをダウンロード
取得したCOOKIEを使って、ログインが必要なファイルをダウンロードします。
curl -s -b <(echo $COOKIE) -O https://example.com/secure-file.zip
-
-b
: リクエストにcookieを含めます。 -
-O
: ファイルを保存する際に、元のファイル名を使用します。
3. エラーハンドリングを行う
ファイルダウンロードの際にエラーハンドリングを行います。
DOWNLOAD_STATUS=$(curl -s -w "%{http_code}" -b <(echo $COOKIE) -O https://example.com/secure-file.zip)
if [ "$DOWNLOAD_STATUS" -ne 200 ]; then
echo "Failed to download file. HTTP status: $DOWNLOAD_STATUS"
exit 1
fi
-
-w "%{http_code}"
: ダウンロード後のHTTPステータスコードを取得します。 -
exit 1
: エラー発生時にスクリプトを終了します。
補足: cookie取得時のエラーハンドリングも可能ですが、cookie取得の際に特定の文字列をチェックする方法が推奨されます。
まとめ
curlを使ってsession_cookieを取得し、そのcookieを使用してログイン必須のファイルをダウンロードする方法を紹介しました。この手法を活用すれば、自動化スクリプトや定期的なファイル取得に役立てることができます。