接口自动化之cookies/session/token
现在有很多网站有验证码,跳过验证码实现登录可以使用cookies登录
目录
1、requests的添加cookies的方法
2、添加cookies保持登录
3、使用session保持登录
1、requests的添加cookies的方法
requests库里面有个对cookies进行专门处理的类,用法如下:
2、添加cookies保持登录
方法一:手动抓取cookies然后添加
实现登录操作如下:
第一步:方法登录前页面,获取部分cookies
1 2 3 | url2 = "http://mysrc.sinaapp.com/accounts/login/" s = requests.session() r = s.get(url2) |
第二步:调用cookies的jar包,来添加cookies,特别的,我们不知道需要添加哪些cookies时,可以通过fiddler来对比,登录后比登录前多了什么
1 2 3 4 5 6 7 | 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) |
登录后:
第三步:访问需要登录的接口
1 2 3 4 5 6 | data1 = { "search_text" : "1" , "page" : "1" } url1 = "http://mysrc.sinaapp.com/search/" r1 = s.post(url1,data = data1) |
这个时候可以看到,访问的内容是登录后
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # 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,传给需要登录的请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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会话对象保持登录
1 | Login.py |
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
第二步:直接调用登录函数,会话中自动保持登录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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
每个人都是一座山 世上最难攀越的山 其实是自己 往上走 即便一小步 也有新高度
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步