Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自动登录尝试给出状态代码500_Javascript_Jquery_Forms_Login_Automation - Fatal编程技术网

Javascript 自动登录尝试给出状态代码500

Javascript 自动登录尝试给出状态代码500,javascript,jquery,forms,login,automation,Javascript,Jquery,Forms,Login,Automation,我正在尝试自动登录到一个HTML表单,该表单附带了一些jQuery。我想从命令行(wget)登录。为了做到这一点,我首先试图找出当我提交表单时会发生什么。Firefox告诉我,提交时会执行以下代码: function(e) { if (e.preventDefault(), StartPage.auth.busy) return false; StartPage.auth.busy = true; var form = $("#login_form"), user = for

我正在尝试自动登录到一个HTML表单,该表单附带了一些jQuery。我想从命令行(
wget
)登录。为了做到这一点,我首先试图找出当我提交表单时会发生什么。Firefox告诉我,提交时会执行以下代码:

function(e) {
  if (e.preventDefault(), StartPage.auth.busy) return false;
  StartPage.auth.busy = true;
  var form = $("#login_form"),
    user = form.find("input[name=username]").val(),
    p = form.find("input[name=password]").val(),
    rem = $("#remember-me").is(":checked");
  $.post(StartPage.uris.auth, {
    username: user,
    password: p,
    remember: rem ? 1 : 0
  }, function(e) {
    return e.error ? false : void document.location.reload()
  })
}
在我看来,它似乎先做了一些验证,然后将内容发布到
StartPage.uris.auth
,它总是
/page/auth

现在,当我尝试手动执行此操作时:

$ wget --save-cookies cookies.txt --keep-session-cookies --post-data='username=user&password=pass&remember=1' --user-agent='Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0' "https://www.website.com/page/auth"
它只是给我一个状态代码500。特别是,如果我的密码不正确,它会用一个正确的HTML页面回答,上面写着“用户或密码不正确”。我知道500实际上是不可能调试的,因为它的发生不是我的错。然而,这怎么可能发生呢?当我使用
wget
发送POST请求时,我做的不是与jQuery代码片段完全相同的事情吗?我还尝试在Firefox中伪造请求,得到了相同的结果,所以cookies没有问题

当我这样做的时候

$.post(StartPage.uris.auth, {
    username: "user",
    password: "pass",
    remember: 1
  }, function(e) {
    return e.error ? !1 : void document.location.reload()
  })

从Firefox javascript控制台,一切正常。

尝试将协议添加到
wget
命令的url。另外,如果url如您所说以结尾的
/
结尾,请确保您的命令中有完全相同的url。然后,如果您的用户名和密码包含特殊字符,请确保对这些字符进行url\u编码(例如:空格将变成
%20
)。如果仍然不起作用,请在打开“网络”选项卡的情况下登录站点,查看请求标题,并尝试复制其中的一些标题,看看是否有任何区别。@blex添加协议也会给我带来同样的结果,很遗憾。后面的斜杠是我的打字错误,很抱歉。密码和用户名都是ASCII码,实际上我特别注意;)。我将查看请求标题,谢谢!尽管如此,当我从Firefox内部发出请求时,这些不是应该是正确的吗?按照我的方式,我转到网络选项卡,然后通过将GET请求的类型更改为POST并添加内容类型和内容长度参数,最后添加正文来编辑GET请求。还有什么遗漏吗?不幸的是,事实上,我说不出:(正如您所说,获取一个普通错误500不是很有帮助,请看:-并对照它检查您的请求头。@blex@RobinMackenzie您是对的,结果是这些头。执行jquery代码段会给我另一个头,我需要将其作为标志添加到wget:
--header=“X-request-With:XMLHttpRequest”
。你们中有人想写一个完整的答案,这样我就可以接受了吗?我当然也可以自己写一个。我不确定哪一个更合适。