python学习-通过requests模拟登录

事情是这样的

在网上找了很多例子,都没能很顺利的解决我的这个需求,只能自己依照自己的需求去进行各种知识的恶补,终于搞了两天,把想要做的东西搞定了

使用requests,通过post请求去模拟账号登录

起点是这个样子

网站为了限制有些内容和操作的展示,对于用户的认证做了要求,比如

http://192.168.1.88/bugfree/index.php/bug/list/2

这个网址是公司bugfree登录后bug列表的地址,如果我们直接使用requests.get去请求这个网址的信息,他会Redirect到登录页

http://192.168.1.88/bugfree/index.php/site/login

上代码

import requests
HOME_URL_2 = 'http://192.168.1.88/bugfree/index.php/bug/list/2'
print requests.get(HOME_URL_2).url

#输出结果是http://192.168.1.88/bugfree/index.php/site/login

这明显不是我们需要的结果

然后是这个样子

通过Google,很容易就能找到原因:你的身份没有被服务器确认,所以你并不能得到这个页面的内容。而网页对你的身份的认证只有一个——Cookies,有些网站有验证码,有_xrsf,这些额外的认证信息,也只不过是对于你获取到Cookies的一些额外限制罢了。

获取到了Cookies之后,在get请求中将Cookies加入请求就能成功进入我们想要进入的网页了,类似这样:

requests.get(HOME_URL_2, cookies=Cookies).url

那么问题来了,如何获取到这个Cookies。

最后是这个样子

在stackoverflow中,查到一段这样的代码

import requests
HOME_URL_2 = 'http://192.168.1.88/bugfree/index.php/bug/list/2'
login_session = requests.session()
print login_session.cookies.get_dict()
login_session.get(HOME_URL_2)
print login_session.cookies.get_dict()

两个输出结果分别是{}和{你的cookies}

然后我又Google到,允许你访问网站的Cookies是在POST请求中生成的。POST的代码是这样的

login_session.post(HOME_URL_2, login_data)

login_data通过Chrome或者FireFox浏览器的network功能中,查看参数可以找到,将里面的内容完整的放入一个字典中即可。

通过这段代码,我找到了我们需要的Cookies,然后将这个Cookies放入到get请求中,就可以成功得到我们想要的网页了。

下面是完整代码:

import requests
LOGIN_URL = 'http://192.168.1.88/bugfree/index.php/site/login'
HOME_URL_2 = 'http://192.168.1.88/bugfree/index.php/bug/list/2'
login_data = {}
login_data['loginform[username]'] = 'user'
login_data['loginform[password]'] = '123456'
login_data['loginform[language]'] = 'zh_Cn'
login_data['loginform[rememberMe]'] = '0'

login_session = requests.session()
ls = login_session.post(LOGIN_URL, login_data)
response = login_session.get(HOME_URL_2)

现在回头看自己这两天的工作,不免有些唏嘘,虽然写出来了,却也不免浪费太多时间。接下去还有不少工作要做,python学习之路还很长

 

差不多半年没发博客了,一来确实没习惯发,二来这段时间的测试技术学习陷入了巨大的瓶颈。现在才慢慢走出来!这段时间的规划也是以python为主,不再拘泥于具体的测试框架。

本文由本人原创,创作不易,转载请注明出处,谢谢!

posted on 2016-05-17 11:45  捞月丶  阅读(906)  评论(0编辑  收藏  举报

导航