事情是这样的
在网上找了很多例子,都没能很顺利的解决我的这个需求,只能自己依照自己的需求去进行各种知识的恶补,终于搞了两天,把想要做的东西搞定了
使用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为主,不再拘泥于具体的测试框架。
本文由本人原创,创作不易,转载请注明出处,谢谢!