【问题标题】:Download a page using bash which requires authentication使用 bash 下载需要身份验证的页面
【发布时间】:2015-11-17 22:55:46
【问题描述】:

我知道这已经被问过好几次了,但解决方案对我不起作用。 我正在使用 ubuntu 14 TLS,我想在外部设备上下载某个页面并将其保存为 html 文件。 问题:

  1. 要进入该页面,需要在登录页面上输入用户名和密码。据我所知,身份验证通过 JavaScript 工作。

  2. 我要下载的页面类似于数据库。要查看我要保存的信息,我必须单击该页面上的“全部显示”按钮,该按钮也使用 JavaScript。

我试过了

wget --secure-protocol=TLSv1 --user=op --password=pw --save-cookies cookies.txt --no-check-certificate https://10.84.163.146/login/login

wget --load-cookies cookies.txt -p https://10.84.163.146/analyses.

但它不起作用。

我也试过了

wget --cookies=on --save-cookies=cookies.txt --keep-session-cookies --no-check-certificate  --post-data 'user=op&passwort=pw' https://10.84.163.146/

wget --cookies=on --load-cookies=cookies.txt --keep-session-cookies --no-check-certificate https://10.84.163.146/analyses

它下载一个文件,但它始终是登录页面。 cookie.txt 包含以下信息:

# HTTP cookie file.
# Generated by Wget on 2015-08-24 15:29:10.
# Edit at your own risk.

10.84.163.146   FALSE   /   TRUE    0   BALANCEID   balancer.thin1
10.84.163.146   FALSE   /   TRUE    0   _session_id dcfd63dad96cede4c3e5927335cbf411

这是登录脚本:

// Make sure we have cookies enabled for this site
var tmpcookie = new Date();
chkcookie = (tmpcookie.getTime() + '');
document.cookie = "chkcookie=" + chkcookie + "; path=/";
if (document.cookie.indexOf(chkcookie,0) < 0) {
   alert("Cookies are required for this site.\n" +
    "Please unblock cookies in your browser setting.");
 }

 (function($){
   $(document).ready(function(){
     $('#login-container').find('input.form-control').blur(function(e){
       $('#login-container').find('.form-group.auth').removeClass('focus');
}).focus(function(e){
  $(this).parents('.form-group:first').addClass('focus');
    });
   });
 })(jQuery);

还有什么想法?

【问题讨论】:

  • 与 --post-data 类似的命令对我有用。 wget --save-cookies cookies.txt --keep-session-cookies --no-check-certificate --post-data 'user=op&passwort=pw' 10.84.163.146
  • 刚试过,对我不起作用。
  • javascript 是做什么的?了解应用程序的运行方式对于解决方案至关重要。例如,如果 Javascript 仅用于执行 XHR 以检索数据,则您应该简单地获取该 URL。如果它与后端进行某种握手,您将需要知道这意味着什么......等等。
  • @GerardvanHelden 在上面的帖子中添加了脚本
  • 如果该 javascript 在客户端执行,那么 wget 将无法工作。 wget 不执行 javascript。

标签: linux bash ubuntu


【解决方案1】:

为什么您的尝试可能不起作用:

您提到的登录脚本是应在浏览器中运行的 javascript 代码,作为提供下载文件的预检查。 由于您是从 wget 运行的,因此它应该无法从 CDN 下载 jQuery 源代码、执行不同的模块、打开所需的任何标志并最终让浏览器显示下载对话框。 在这种情况下,它应该是客户端验证,但从外观上看,但我们谈论的是摘录,因此我们必须思考和做出假设。

要遵循的一些任务可能会引导您朝着正确的方向前进:

最好的办法是安装一些东西,让你真正看到发生了什么以及浏览器从哪里下载数据。

  • 如果是 Firefox,您可以使用实时 HTTP 标头查看您想要的实际文件链接,请注意,它非常冗长,但这也意味着它给您提供了很多控制权。
  • 如果是 Chrome,您可能想尝试使用它自己的工具集,只需按 F2 并在“网络”选项卡上保持警惕。

下载链接可能有额外的参数,你可以从你的 bash 脚本中调整这些参数,这些工具应该让你看到它们并采取相应的行动:)

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2021-06-23
    相关资源
    最近更新 更多