Google apps script の Web app に wget でアクセスする方法

151 views
Skip to first unread message

Tsuyoshi Kodama

unread,
Feb 7, 2018, 6:23:44 AM2/7/18
to Google Apps API Japan
児玉といいます、はじめまして。

Google apps script の web app をテストしたく、"Test web app for your latest code." のリンクから wget コマンドで結果をダウンロードしようとしています。

このとき、latest code であるため一般公開が使えず、必ず権限保有者(ここでは自分自身)のアカウントからログイン済みの状態でアクセスする必要があります。

そこで以前は、

1) ブラウザからログインし、cookie情報をファイルへエクスポートする
2) wget 起動時に、--load-cookies= で上記ファイルを読みこませる

ことで、この問題をクリアしていました。

ところが、昨日久しぶりに同じ方法をためしたところログイン画面が取得されてしまい、Web app にアクセスすることができなくなってしまいました。

確認したことは:

1) エクスポートした cookies.txt を virtualbox など隔離された環境の Firefox にインポートした場合は、アクセスできる。
2) 同じ cookies.txt を Firefox ではなく wget に読み込ませても、アクセスできない(ログイン画面になってしまう)

です。

なんらかのカタチで web app の結果をファイルに保存したいのですが、なにか方法はあるでしょうか?
(あるいは私がなにか間違えているのでしょうか)

なにかご存じの方がいらしたら、ヒントだけでもいただけると助かります。
よろしくお願いします。


-----
児玉 剛
tsuyosh...@gmail.com



Tatsuya Nakano

unread,
Feb 7, 2018, 7:03:16 AM2/7/18
to Google Apps API Japan
児玉さん

中野です。

User-Agent とかで弾いているのかもしれませんね。
正常に動いている Firefox のリクエストと同じようになるように header を指定してみると通るかもしれません。




2018年2月7日水曜日 20時23分44秒 UTC+9 Tsuyoshi Kodama:

Masami HIRATA

unread,
Feb 7, 2018, 8:35:45 AM2/7/18
to google-app...@googlegroups.com
msmhrt と申します。横から失礼します。

恐らくは、wget によるアクセス、または wget が動作している端末からのアクセスが通常とはことなるアクセス方法だったために、ログイン時に Google から送られた確認コードを入力する手続きが必要になったのではないかと思われます。

各種パッチが適用された最新版の w3m をインストールして、端末上で w3m を使って一度 Gmail にログインしてから w3m -dump_source でその API の結果を取得するという方法を検討してみてはいかがでしょうか?

もし w3m で Gmail にログインしようとした際にリダイレクトを繰り返すようでしたら、w3m のバージョンが古いと思われます。

w3m は JavaScript が使えないので Gmail を簡易 HTML モードでしか表示できませんし、Cookie の保存やエンコーディングの指定等のオプションの適切な設定が必要かもしれませんので参考まで。

以上

2018年2月7日 21:03 Tatsuya Nakano <tatsuy...@gmail.com>:

--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-apps-api-japan@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Tsuyoshi Kodama

unread,
Feb 7, 2018, 9:51:24 AM2/7/18
to google-app...@googlegroups.com
児玉です。

さっそくありがとうございます。

中野さん、
> User-Agent とかで弾いているのかもしれませんね。

ああ、、、そんなことをしてる可能性もありますか・・・なるほど。
ヘッダ完コピ、試してみます(まずはUser-Agentからいきますが)。

確かに完全偽装ならいけそうな気がします。
ありがとうございます。

msmhrtさん、
> w3m -dump_source でその API の結果を取得するという方法

w3m、はじめて知りました。

Ubuntuですが、apt install で取得できたので試したところ、難なくログインできました。(gmail 画面は見えませんでしたが)
その後ターゲットの web app にアクセスしたところ、期待した結果を表示させることができました。
w3m すごいですね。中毒性が高そうです(笑

明日、-dump-source も試してみます(ヘッドレスで動かしたいのです)。



両方試したうえで、また報告させてください。
ありがとうございました。



児玉





このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsubscri...@googlegroups.com にメールを送信してください。

このグループに投稿するには google-apps-api-japan@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Tsuyoshi Kodama

unread,
Feb 8, 2018, 9:02:57 AM2/8/18
to google-app...@googlegroups.com
中村さん、msmhrtさん、

昨日はありがとうございました。
報告です。

1) Header指定

単純にはいかず、結論としては途中であきらめました。

● User agent のみ指定

Firefoxでログインした後、User agentをFirefoxと同じに設定してwgetを実行しました。
指定なしの場合41Kバイトほどであった取得ファイルが、指定後は950Kバイトに増え、その殆どは、圧縮された(難読化された)Javascriptコードでした。

ブラウザで開くと、自分自身のアカウントに対するパスワードを求められていました。
(少なくとも自分自身のアカウントを認識してくれたのは前進)

● ヘッダ全数指定

次に、すべてのヘッダを指定してwget実行したところ、 400 Bad Request が戻り、取得そのものができませんでした。
ヘッダをひとつづつ追加・削除することで、問題部位の特定は可能っぽかったですが、今日のところはここであきらめました。


2) w3m

うまくいきました。

● ブラウザでの閲覧

昨夜試した時点で、期待した結果が表示されました。

● -dump_source

最初 -dump_source オプションだと、取得される結果が文字化けしているように見えました。
ただ 1 の作業中にどこかで content-encoding: gzip と見かけたのでもしやと思い、

w3m -dump_source [[URL]] > src.zip

として保存→展開してやると、data という名前のテキストファイルに、期待した結果を得ることができました。

● -dump

今回のケースではweb appが戻すのはプレーンテキストなので、ソースも描画結果も同一です。
なので、 単純に

w3m -dump [[URL]]

を試したところ、標準出力に期待の結果を得ることができました。


3) 結論

今回 Web app の出力をコマンドラインでファイルに保管したかったのは、Google apps script の開発環境の一部としてでした。

なので、できればアプリの追加インストールなどせず linux 標準コマンドである wget だけで実現できるとよかったのですが一筋縄ではいかなそうでした。
また、ブラウザごとに違う手順での環境構築が必要になってしまうかもしれません。

そこで今回は単純でミスのすくない手順で環境構築できることを優先して、w3m で行くことにしました。
(インストールも apt で一発でしたし)


中村さん、msmhrtさん、本当に助かりました & 勉強になりました。
ありがとうございました。



児玉 剛



Reply all
Reply to author
Forward
0 new messages