接口自动化之cookies/session/token
现在有很多网站有验证码,跳过验证码实现登录可以使用cookies登录
目录
1、requests的添加cookies的方法
2、添加cookies保持登录
3、使用session保持登录
1、requests的添加cookies的方法
requests库里面有个对cookies进行专门处理的类,用法如下:
2、添加cookies保持登录
方法一:手动抓取cookies然后添加
实现登录操作如下:
第一步:方法登录前页面,获取部分cookies
url2="http://mysrc.sinaapp.com/accounts/login/" s=requests.session() r=s.get(url2)
第二步:调用cookies的jar包,来添加cookies,特别的,我们不知道需要添加哪些cookies时,可以通过fiddler来对比,登录后比登录前多了什么
c=requests.cookies.RequestsCookieJar() #域名一定要填写,不然会报错 c.set('csrftoken','JIrj423TaumVWIym5TT0Gy0uAybmSAWi',path='/', domain='mysrc.sinaapp.com') c.set('sessionid','4831409ded4f674da3af33625b99e7e7',path='/', domain='mysrc.sinaapp.com') #更新一下cookies s.cookies.update(c)
登录后:
第三步:访问需要登录的接口
data1={ "search_text":"1", "page":"1" } url1="http://mysrc.sinaapp.com/search/" r1=s.post(url1,data=data1)
这个时候可以看到,访问的内容是登录后
完整代码:
# coding:utf-8 import requests url2="http://mysrc.sinaapp.com/accounts/login/" s=requests.session() r=s.get(url2) #使用cookies的set方法将cookies信息填进去 c=requests.cookies.RequestsCookieJar() print s.cookies #域名一定要填写,不然会报错 c.set('csrftoken','JIrj423TaumVWIym5TT0Gy0uAybmSAWi',path='/', domain='mysrc.sinaapp.com') c.set('sessionid','4831409ded4f674da3af33625b99e7e7',path='/', domain='mysrc.sinaapp.com') #更新一下cookies s.cookies.update(c) print s.cookies data1={ "search_text":"1", "page":"1" } url1="http://mysrc.sinaapp.com/search/" r1=s.post(url1,data=data1) print s.cookies print r1.content
方法二:使用cookies.get_dict()方法获取所有的cookies,传给需要登录的请求
import requests url="xx:8080/jpress/admin/login" headers={ "Content-Type": "application/x-www-form-urlencoded"} body={"username":"admin", "password":"123456", "remember_me":"on"} p=requests.post(url=url,headers=headers,data=body) print(p.json()) all_cookies=p.cookies.get_dict() urls="xx:8080/jpress/admin/content/save" body={"content.status":"nomal", "content.module":"article", "content.slug":"new", "content.title":"new", "ucode":"9e4152533ae7a1d4246fed47acc8c463", "content.text":"new"} q=requests.post(urls,body,headers=headers,cookies=all_cookies) print(q.json)
3、使用session保持登录
第一步:写一个登录函数,使用账号密码完成登录,使用requests的session会话对象保持登录
Login.py
import requests class Login(): def login(self): url="http://xx:8080/jpress/admin/login" headers={ "Content-Type": "application/x-www-form-urlencoded" } body={"username":"admin", "password":"123456"} s=requests.session() p=s.post(url,headers=headers,data=body) return s
第二步:直接调用登录函数,会话中自动保持登录
from m_module.login_api import Login import requests class Topicadd(): def __init__(self): self.s=Login().login() def add(self,data1,data2,data3): headers={ "Content-Type": "application/x-www-form-urlencoded" } urls="http://139.129.88.36:8080/jpress/admin/content/save" body={"content.status":"nomal", "content.module":"article", "content.slug":data1, "content.title":data2, "ucode":"9e4152533ae7a1d4246fed47acc8c463", "content.text":data3} p=self.s.post(urls,body,headers=headers) return p
4、使用token保持登录
def login(s, username="admin", password="123456"): url = "http://localhost:8080/login" body = { "username": username, "password": password } r = s.post(url, json=body) # 更新session会话的头部 h = { "Authorization": "Token "+r.json()["token"] } s.headers.update(h) return s
每个人都是一座山 世上最难攀越的山 其实是自己 往上走 即便一小步 也有新高度