UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Cloud Build】ログインが必要なサイトからのファイルダウンロード

Cloud Buildを使ってzipファイルダウンロードしたのちGCSにアップロードすることを行っていた

uga-box.hatenablog.com

この仕組みをつかって他の複数のサイトでもダウンロードをしようとしたが、あるダウンロード元のサイトが一度ログインする必要があるサイトでありビルドが失敗してしまった

uga-box.hatenablog.com

ブラウザでアクセスする分にはURLにusername=xxxx&password=xxxxのようにクエリパラメータをつけておけば、ログイン画面にリダイレクトしてログインしたのち、再度リダイレクトされ勝手にファイルダウンロードが始まるのだが、これをCloud Build上でも行いたい

やりたいこと

Cloud Build上とはいったが、やりたいことは単純にcurlコマンドの話なので、curlコマンドでログインした後にログイン情報を使ってダウンロードしにいくことがやれれば大丈夫そう

手順としては

  1. ログインページのformのアクションURLに対して、usernameとpassword送信し、ログイン情報をもつcookieをファイルに保存する
  2. そのcookieファイルを使って、ダウンロードURLにアクセスする

使うcurlコマンド

  1. ログインページのformのアクションURLに対して、usernameとpassword送信し、ログイン情報をもつcookieをファイルに保存する
$ curl -c cookie.txt -d 'username=xxxx' -d 'password=xxxx' -XPOST 'https://example.com/path/to/login-action-url'
  1. その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'