【发布时间】:2015-02-07 17:47:48
【问题描述】:
我正在尝试编写一个脚本来登录某个站点并获取我将登录的页面信息。 我在堆栈上进行了搜索,看来我必须使用 3 个 wget 来完成: 一个用于获取隐藏令牌,一个用于 cookie 和发布数据,最后一个用于获取我想要的。代码如下:
#!/bin/bash
# get the login page to get the hidden field data
wget -a log.txt -O loginpage.html --user-agent="Mozilla/5.0" site/login
hiddendata=$(cat loginpage.html | grep __Req | cut -d'"' -f6,6 | head -n1 | sed s/\"//g)
echo "Logging with user $1 and pass $2"
wget --secure-protocol=auto --save-cookies cookies.txt --post-data="LoginDataModel.LoginName=$1&LoginDataModel.Password=$2&__RequestVerificationToken=${hidden_data}" --user-agent="Mozilla/5.0" site/login/login
其中 site/login 是登录页面,site/login/login 是发布操作,发布数据值是
Logging with user x and pass y
--2015-02-07 12:29:07-- site/Login/Login
Resolving site (site)... 91.208.180.39
Connecting to site (site)|91.208.180.39|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: site/Login/Login [following]
--2015-02-07 12:29:18-- site/Login/Login
Resolving site (site)... 91.208.180.39
Connecting to site (site)|91.208.180.39|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2015-02-07 12:29:23 ERROR 404: Not Found.
当我检查时,站点/登录/登录存在。我究竟做错了什么?谢谢你。 由于无法正确连接,我还没有完成第三个 wget 以获得我想要的东西。
【问题讨论】:
-
您尝试
echo完整的 wget 命令并手动运行它吗? -
是的,我试过了,没有区别。首先我认为这是因为我没有使用任何 ssl 协议,但这并没有解决问题。在它连接到 site/login/login 后,它被移动到 site/login/login 并得到 404'd.site/login/login 存在。
-
我怀疑这是 SSL 问题,请注意您的第一次尝试是 HTTPS(端口 443),它被重定向到端口 80 (HTTP)。当您从浏览器登录时,使用像 wireshark 这样的工具来嗅探 HTTP 会话并寻找差异。
-
我建议改用 curl,详细模式会显示标题非常便于调试
标签: linux bash login wget postdata