弄了一整天了,还是没什么头绪。
模拟登录成功的话会返回 302 ,可是每次都是不行。
这是代码:
https://gist.github.com/CraxGrix/5bb33e116934f1ebf259
V2ex 不能发图片,那我发我的知乎问题吧。那里写的更清楚。
www.zhihu.com/question/40393212
这里提供一个帐号供各位测试
帐号: 13136180314
密码: 123456
1
aec4d 2016-02-17 17:32:43 +08:00 1
用好 CTRL+V 神技
# loginId , validCode import requests def login(): s = requests.session() s.get('http://www.guahao.com/user/login') captcha_content = s.get('http://www.guahao.com/validcode/genimage/1').content with open('dic.jpeg', 'wb') as fp: fp.write(captcha_content) data = { "method": "dologin", "target": "/", "loginId": "13136180314", "password": "e10adc3949ba59abbe56e057f20f883e", "validCode": input('CODE: ') } r = s.post('http://www.guahao.com/user/login', data=data, allow_redirects=False) print(r.status_code) if __name__ == '__main__': login() |
2
Graxce OP @aec4d 实在是非常感谢,每次我都不记得检查自己的代码。每次出错都是因为我自己疏忽所以才导致的。真是太蠢了我!以后我不会提这种这么蠢的问题了!!谢谢!
|
3
slideclick 2016-02-19 14:44:34 +08:00
@aec4d 从你代码看,你是把 password 加密了的。从那个挂号网页面 code 怎么看出来的加密算法?
|
4
sololivan 2016-02-19 16:05:44 +08:00
@slideclick 不用知道加密算法, 直接看加密好的发送请求呀.
|
5
Graxce OP @slideclick 常见的加密算法就那么几个,拿到 password 数据后只需要找在线加解密工具。一个一个试就好啦。
|
6
slideclick 2016-02-22 09:48:47 +08:00
@sololivan 确实可以解决这个问题,我感兴趣的是,从该网站的前端页面代码应该可以看到加密算法,但是我前端不够熟悉,不知道怎么看出来的
|
7
slideclick 2016-02-22 09:53:04 +08:00
@Graxce http://onlinemd5.com/ 把你的口令填进去就行了。但是你总要试三次。我的问题是,拿到一个前端页面的 code 这个你总可以拿到因为在浏览器里面,你怎么知道它的加密算法?浏览器肯定知道,它发的是 MD5 之后的,它怎么知道的?
|
8
slideclick 2016-02-22 17:30:38 +08:00
打开 http://www.guahao.com/user/login 页面看源码,看不到加密 password 的 js 代码。而显然它的 post 的目标 /user/login 要的是 MD5 加密,我的问题是,如果你抽象地拿到这个问题,有什么办法知道它用的什么加密算法。
|
9
xqin 2016-02-23 14:16:24 +08:00
1. 得到登陆时提交的数据字段名.(比如你的这个是 password)
2. 然后在浏览器(Chrome)中打开控制台, 按 Ctrl+Shift+F, 在里面输入 password 3. 在查找到的结果中, 以你的为例,会看到一个 new-account.js, 在这个文件里会找到下面这样的代码: ``` i.find("#J_LoginSubmit").click(function() { return r.find(".g-tips-box-error").hide(), r.find(".g-tips-box-succ").hide(), $GUB.isActive($(this)) && e.checkValidity(r) && ($GUB.disable($(this), "处理中..."), r.find("input[name='password']").val($().crypt({ method: "md5", source: r.find("#password").val() })), r.submit()), !1 } ), ``` 然后你就知道它用的什么加密的了. |