Google App Scriptを使ってあるサイトにログインしデータを取得しようと思っています。
ログイン自体は出来たようなのですが、その後のページ遷移の為に必要だと思われるCookieが取得できず困っています。
私の記述が間違っているのであればまだいいのですが、
サイト側が特定のユーザーエージェントなどで与えるCooikeを変更していた場合、徒労に終わってしまいます。
恐らく可能かとは思います、が実際にこのようなケースを経験されたとこはありますでしょうか。
或いは私の記述に誤りがある可能性が高いでしょうか。
一応、Chromeのデベロッパーツールを使い、ユーザーエージェントをGASの
「Mozilla/5.0 (compatible; Google-Apps-Script)」
に変更してみましたところ問題なくログイン出来てしまいました。
実際の処理としては
同じくデベロッパーツールで確認したところ、
- POST用ログインページ GET 302 →ログインページへ
- ログインページ GET 200
- (ログインページに入力しボタンクリック)
- (POSTのペイロード:ID、パスワード、ログインページ下部にjsで生成されたcsrf対策トークン)
- POST用ログインページ POST 302 →ユーザー画面へ ←ここのCookieがGASとクライアントで異なる
- ユーザー画面 GET 200
という感じでした。
なのでGASでは
var response = UrlFetchApp.fetch('ログインページ'); var csrfToken = Parser.from().to().build();//token抜き出し var cookie = response.getAllHeaders()["Set-Cookie"]; var header = { "Cookie": cookies[0], }; var login_payload = { "mailAddress": "ID", "password": "パスワード", "csrfToken": csrfToken[0] } var post_options = { method: "post", payload: login_payload, headers: header, muteHttpExceptions : true, followRedirects: false, }; //POST response = UrlFetchApp.fetch('POST用ログインページ',post_options); header = { "Cookie": cookies[0], //**←ここのCookieがGASとクライアントで異なる** };
という風なコードを書いてみましたが中身が異なりその後のセッションの継続が出来ない状態です。
あなたの回答
tips
プレビュー