我正在尝试递归下载通常仅在您登录时可用的网站。
我有有效的用户名和密码,但问题是我需要通过 Web 界面登录,所以使用--user=user and --password=password
无济于事。
wget
只下载一个带有文字的网页:
抱歉,此页面不可用,也许您忘记登录了?
可以下载吗?
我不能使用 --user, --password 即使在登录页面,因为没有提到的 FTP/HTTP 文件检索登录man wget
:
--user=user
--password=password
Specify the username user and password password for both FTP and
HTTP file retrieval.
Run Code Online (Sandbox Code Playgroud)
经典的图形登录就在那里。
如果我尝试这样做:wget --save-cookies coookies --keep-session-cookies --post-data='j_username=usr&j_password=pwd' 'https://idp2.civ.cvut.cz/idp/Authn/UserPassword'
。使用POST方式登录并尝试保存cookies,cookies文件为空,保存页面为错误页面。
网址是https://idp2.civ.cvut.cz/idp/Authn/UserPassword
。实际上,当我想登录时,它会将我重定向到此页面,当我成功登录时,它会将我重定向回我之前所在的页面或登录后我想进入的某个页面(例如:https://progtest.fit.cvut.cz/
.
会话信息可能保存在 cookie 中,以便您在登录后导航到其他页面。
如果是这种情况,您可以分两步执行此操作:
wget
's--save-cookies mycookies.txt
和--keep-session-cookies
选项以及您的--username
和--password
选项wget
's--load-cookies mycookies.txt
选项。编辑
如果--password
and--username
选项不起作用,您必须找出登录页面发送到服务器的信息并模仿它:
GET
请求,您可以GET
直接在 wget 必须获取的地址中添加参数(确保正确引用&
,=
和其他特殊字符)。网址可能看起来像https://the_url?user=foo&pass=bar
.POST
请求,您可以使用wget
's--post-data=the_needed_info
选项在所需的登录信息上使用 post 方法。编辑 2
看来您确实需要POST
使用j_username
和j_password
设置的方法。尝试--post-data='j_username=yourusername&j_password=yourpassword
选择wget
.
编辑 3
通过原始页面,我能够更多地了解正在发生的事情。话虽如此,我无法确保它有效,因为我没有(也不想要)有效凭据。
话虽如此,这就是正在发生的事情:
https://progtest.fit.cvut.cz/
设置了一个PHPSESSID
cookie 并为您提供登录选项。login
按钮发送一个请求,https://progtest.fit.cvut.cz/shibboleth-fit.php
该请求接受 PHPSESSID cookie(不确定它是否使用它)并将您重定向到 SSO 引擎,其中包含一个专门为您设计的 url,如下所示:https://idp2.civ.cvut.cz/idp/profile/SAML2/Redirect/SSO?SAMLRequest=SOME_VERY_LONG_AND_UNIQUE_ID
_idp_authn_lc_key
并将您重定向到页面https://idp2.civ.cvut.cz:443/idp/AuthnEngine
,该页面将您再次重定向到https://idp2.civ.cvut.cz:443/idp/Authn/UserPassword
(真正的登录页面)j_username
以及j_password
来自 SSO 响应的 cookie前四个步骤可以这样完成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'
Run Code Online (Sandbox Code Playgroud)
请注意,wget
重定向完全由他自己完成,这在这种情况下对我们有很大帮助。