ログインして初めて利用できるウェブサイトを再帰的にダウンロードしようとしています。
有効なユーザー名とパスワードを持っていますが、問題はウェブインターフェースからログインする必要があるため、--user=user and --password=password
を使用しても解決しません。
wget
は、次のテキストを含む1つのWebページのみをダウンロードします:このページは使用できません。ログインを忘れた可能性がありますか?
ダウンロードは可能ですか?
man wget
で説明されているように、FTP/HTTPファイル取得ログインがないため、ログインページでも--user、-passwordを使用できません。
--user=user
--password=password
Specify the username user and password password for both FTP and
HTTP file retrieval.
クラシックなグラフィカルログインがあります。
これを実行しようとすると、wget --save-cookies coookies --keep-session-cookies --post-data='j_username=usr&j_password=pwd' 'https://idp2.civ.cvut.cz/idp/Authn/UserPassword'
になります。 POSTメソッドを使用してログインし、Cookieを保存しようとすると、Cookiesファイルは空になり、保存されたページはエラーページになります。
RLはhttps://idp2.civ.cvut.cz/idp/Authn/UserPassword
です。実際には、ログインするときにこのページにリダイレクトされ、正常にログインすると、前のページまたは前のページにリダイレクトされますログイン後になりたかった(例:https://progtest.fit.cvut.cz/
。
ログイン後に他のページに移動できるように、セッション情報はおそらくCookieに保存されます。
この場合は、2つの手順でこれを行うことができます。
wget
の--save-cookies mycookies.txt
および--keep-session-cookies
オプションを、--username
および--password
オプションとともに使用します。wget
の--load-cookies mycookies.txt
オプションを使用します。[〜#〜]編集[〜#〜]
--password
および--username
オプションが機能しない場合は、ログインページからサーバーに送信された情報を見つけて、それを模倣する必要があります。
GET
リクエストの場合、GET
パラメータをwgetがフェッチする必要があるアドレスに直接追加できます(&
、=
およびその他の特殊文字を適切に引用符で囲んでください) )。 URLはおそらくhttps://the_url?user=foo&pass=bar
のようになります。POST
リクエストの場合、wget
の--post-data=the_needed_info
オプションを使用して、必要なログイン情報でpostメソッドを使用できます。編集2
j_username
とj_password
を設定したPOST
メソッドが本当に必要なようです。 wget
に--post-data='j_username=yourusername&j_password=yourpassword
オプションを試してください。
編集
Originのページで、何が起こっているのかもう少し理解することができました。とは言っても、有効な資格情報がない(または必要ない)ため、正常に機能するかどうかは確認できません。
そうは言っても、これが起こっていることです:
https://progtest.fit.cvut.cz/
はPHPSESSID
Cookieを設定し、ログインオプションを提示します。login
ボタンをクリックすると、https://progtest.fit.cvut.cz/shibboleth-fit.php
にリクエストが送信され、PHPSESSID Cookieを使用して(使用するかどうかは不明)、次のような特別に細工されたURLを使用してSSOエンジンにリダイレクトされます。 :https://idp2.civ.cvut.cz/idp/profile/SAML2/Redirect/SSO?SAMLRequest=SOME_VERY_LONG_AND_UNIQUE_ID
_idp_authn_lc_key
という名前の新しいCookieを設定し、https://idp2.civ.cvut.cz:443/idp/AuthnEngine
ページにリダイレクトします。これにより、https://idp2.civ.cvut.cz:443/idp/Authn/UserPassword
(実際のログインページ)に再度リダイレクトされます。j_username
およびj_password
を送信します最初の4つのステップは、次のようにwget
を使用して実行できます。
Origin='https://progtest.fit.cvut.cz/'
# Get the PHPSESSID cookie
wget --save-cookies phpsid.cki --keep-session-cookies "$Origin"
# Get the _idp_authn_lc_key cookie
wget --load-cookies phpsid.cki --save-cookies sso.cki --keep-session-cookies --header="Referer: $Origin" 'https://progtest.fit.cvut.cz/shibboleth-fit.php'
# Send your credentials
wget --load-cookies sso.cki --save-cookies auth.cki --keep-session-cookies --post-data='j_username=usr&j_password=pwd' 'https://idp2.civ.cvut.cz/idp/Authn/UserPassword'
wget
はリダイレクションをすべて自分で追跡することに注意してください。これは、この場合にかなり役立ちます。
wget
をいじっているのはなぜですか?このタスクを自動化するには、いくつかの headless browser を使用することをお勧めします。
ヘッドレスブラウザとは何ですか?
ヘッドレスブラウザーは、グラフィカルユーザーインターフェイスのないWebブラウザーです。これらは、一般的なWebブラウザーと同様の環境でWebページの自動制御を提供しますが、コマンドラインインターフェースまたはネットワーク通信を使用して実行されます。
人気のある2つのヘッドレスブラウザーは、phantomjs
(javascript)とGhost.py
(python)です。
まず、phantomjs
をインストールする必要があります。 Ubuntuベースのシステムでは、パッケージマネージャーを使用してインストールするか、ソースから home page からビルドできます。
Sudo apt-get install phantomjs
この後、JavaScriptスクリプトを記述し、phantomjsを使用して実行します。
phantomjs script.js
それでおしまい。
さて、あなたのケースにそれを実装する方法を学ぶために、その クイックスタートガイド に進んでください。例として、facebookに自動的にログインしてスナップショットを撮るには、提供されているGistを使用できます here :
// This code login's to your facebook account and takes snap shot of it.
var page = require('webpage').create();
var fillLoginInfo = function(){
var frm = document.getElementById("login_form");
frm.elements["email"].value = 'your fb email/username';
frm.elements["pass"].value = 'password';
frm.submit();
}
page.onLoadFinished = function(){
if(page.title == "Welcome to Facebook - Log In, Sign Up or Learn More"){
page.evaluate(fillLoginInfo);
return;
}
else
page.render('./screens/some.png');
console.log("completed");
phantom.exit();
}
page.open('https://www.facebook.com/');
ドキュメントを見て、特定のケースに実装してください。 sslエラーが原因でhttps
Webサイトに問題が発生した場合は、次のようにスクリプトを実行します。
phantomjs --ssl-protocol=any script.js
Ghost.pyをインストールするには、pip
が必要です。
Sudo apt-get install python-pip #On a Debian based system
Sudo pip install Ghost.py
これでGhost.pyがインストールされました。 pythonスクリプト内で使用するには、 home page で提供されているドキュメントに従ってください。httpsWebサイトでGhost.pyを使用してみましたが、どういうわけか私にとってはうまくいきませんでした。試してみて、うまくいくかどうか確認してください。
Selenium などのツールを使用して、ログインプロセスを自動化し、情報を取得することもできます。とても使いやすいです。 here からブラウザのプラグインをインストールする必要があります。そして、あなたはあなたのプロセスを記録し、後でそれを再生することができます。
'curl'
を使用してみてください
curl --data "j_username=value1&j_password=value2" https://idp2.civ.cvut.cz/idp/Authn/UserPassword
応答タイプを確認し、'content-type'
ヘッダーを一致するように設定する必要がある場合があります。例:XML、jsonなど
これらの種類の操作を実行する最新のツールについては、HTTPie
をチェックアウトしてください。
私は同じことを探していて、最終的にuser43791の回答に基づいてツールを書きました。
したがって、あなたが探しているのはおそらくそのようなものです:
https://github.com/atar-axis/TUM-tools/blob/master/moodle_grabber/moodle_grabber.sh
これを他のShibbolethサイトに適合させるのは非常に簡単で、wgetのみに基づいています!
Cookieに加えて、user agentをfirefoxとして使用します。chromeなど)。ほとんどのサーバーは、dwonloadマネージャーを嫌っています。
または Firefoxの拡張機能を使用スクラップブック
その方法は次のとおりです。最初に、FirefoxのライブHTTPヘッダープラグインを使用して通信を分析します。リファラーなどが必要になる場合があります。その情報を入手したら、wget
Cookieを保存し、必要に応じて読み込むことで、それを模倣します。