web-dev-qa-db-ja.com

wgetでユーザー名とパスワードを介してのみ利用可能なHTTPS Webサイトをダウンロードしますか?

ログインして初めて利用できるウェブサイトを再帰的にダウンロードしようとしています。

有効なユーザー名とパスワードを持っていますが、問題はウェブインターフェースからログインする必要があるため、--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/

6
MichalH

ログイン後に他のページに移動できるように、セッション情報はおそらくCookieに保存されます。

この場合は、2つの手順でこれを行うことができます。

  1. Webサイトのログインページでwget--save-cookies mycookies.txtおよび--keep-session-cookiesオプションを、--usernameおよび--passwordオプションとともに使用します。
  2. 取得しようとしている後続のページで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_usernamej_passwordを設定したPOSTメソッドが本当に必要なようです。 wget--post-data='j_username=yourusername&j_password=yourpasswordオプションを試してください。

編集

Originのページで、何が起こっているのかもう少し理解することができました。とは言っても、有効な資格情報がない(または必要ない)ため、正常に機能するかどうかは確認できません。

そうは言っても、これが起こっていることです:

  1. ページhttps://progtest.fit.cvut.cz/PHPSESSID Cookieを設定し、ログインオプションを提示します。
  2. 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
  3. SSO応答は、_idp_authn_lc_keyという名前の新しいCookieを設定し、https://idp2.civ.cvut.cz:443/idp/AuthnEngineページにリダイレクトします。これにより、https://idp2.civ.cvut.cz:443/idp/Authn/UserPassword(実際のログインページ)に再度リダイレクトされます。
  4. 資格情報を入力し、SSO応答からのCookieとともに投稿データj_usernameおよびj_passwordを送信します
  5. ???

最初の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はリダイレクションをすべて自分で追跡することに注意してください。これは、この場合にかなり役立ちます。

9
user43791

wgetをいじっているのはなぜですか?このタスクを自動化するには、いくつかの headless browser を使用することをお勧めします。

ヘッドレスブラウザとは何ですか?

ヘッドレスブラウザーは、グラフィカルユーザーインターフェイスのないWebブラウザーです。これらは、一般的なWebブラウザーと同様の環境でWebページの自動制御を提供しますが、コマンドラインインターフェースまたはネットワーク通信を使用して実行されます。

人気のある2つのヘッドレスブラウザーは、phantomjs(javascript)とGhost.py(python)です。

Phantomjsを使用したソリューション

まず、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を使用したソリューション

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を使用してみましたが、どういうわけか私にとってはうまくいきませんでした。試してみて、うまくいくかどうか確認してください。

更新:GUIベースのソリューション

Selenium などのツールを使用して、ログインプロセスを自動化し、情報を取得することもできます。とても使いやすいです。 here からブラウザのプラグインをインストールする必要があります。そして、あなたはあなたのプロセスを記録し、後でそれを再生することができます。

4
shivams

'curl'を使用してみてください

curl --data "j_username=value1&j_password=value2" https://idp2.civ.cvut.cz/idp/Authn/UserPassword

応答タイプを確認し、'content-type'ヘッダーを一致するように設定する必要がある場合があります。例:XML、jsonなど

2
jas-

これらの種類の操作を実行する最新のツールについては、HTTPieをチェックアウトしてください。

https://httpie.org/

0
Adam Erickson

私は同じことを探していて、最終的にuser43791の回答に基づいてツールを書きました。

したがって、あなたが探しているのはおそらくそのようなものです:
https://github.com/atar-axis/TUM-tools/blob/master/moodle_grabber/moodle_grabber.sh

これを他のShibbolethサイトに適合させるのは非常に簡単で、wgetのみに基づいています!

0
flood

Cookieに加えて、user agentをfirefoxとして使用します。chromeなど)。ほとんどのサーバーは、dwonloadマネージャーを嫌っています。

または Firefoxの拡張機能を使用スクラップブック

  • 使いやすい
  • GUI
0
totti

その方法は次のとおりです。最初に、FirefoxのライブHTTPヘッダープラグインを使用して通信を分析します。リファラーなどが必要になる場合があります。その情報を入手したら、wget Cookieを保存し、必要に応じて読み込むことで、それを模倣します。

0
YoMismo