Cloud Buildを使ってzipファイルダウンロードしたのちGCSにアップロードすることを行っていた
この仕組みをつかって他の複数のサイトでもダウンロードをしようとしたが、あるダウンロード元のサイトが一度ログインする必要があるサイトでありビルドが失敗してしまった
ブラウザでアクセスする分にはURLにusername=xxxx&password=xxxx
のようにクエリパラメータをつけておけば、ログイン画面にリダイレクトしてログインしたのち、再度リダイレクトされ勝手にファイルダウンロードが始まるのだが、これをCloud Build上でも行いたい
やりたいこと
Cloud Build上とはいったが、やりたいことは単純にcurl
コマンドの話なので、curlコマンドでログインした後にログイン情報を使ってダウンロードしにいくことがやれれば大丈夫そう
手順としては
- ログインページのformのアクションURLに対して、usernameとpassword送信し、ログイン情報をもつcookieをファイルに保存する
- そのcookieファイルを使って、ダウンロードURLにアクセスする
使うcurlコマンド
- ログインページのformのアクションURLに対して、usernameとpassword送信し、ログイン情報をもつcookieをファイルに保存する
$ curl -c cookie.txt -d 'username=xxxx' -d 'password=xxxx' -XPOST 'https://example.com/path/to/login-action-url'
- そのcookieファイルを使って、ダウンロードURLにアクセスする
ログイン画面にリダイレクトされるので-L
を付けておく
$ curl -b cookie.txt -LXGET 'https://example.com/path/to/download-file.zip -o file.zip'
Cloud Buildで実行する
steps: # 1. ログインページのfromのアクションURLに対して、usernameとpassword送信し、ログイン情報をもつcookieをファイルに保存する - name: 'appropriate/curl' args: - '-c' - 'cookie.txt' - '-d' - 'username=xxxx' - '-d' - 'password=xxxx' - '-XPOST' - 'https://example.com/path/to/login-action-url'' id: 'step_1' # 2. そのcookieファイルを使って、ダウンロードURLにアクセスする - name: 'appropriate/curl' args: - '-b' - 'cookie.txt' - '-LXGET' - 'https://example.com/path/to/download-file.zip' - '-o' - 'file.zip' id: 'step_2'