绕过cookies进行登录并封装请求方法
之前写了一篇使用session跨请求保持会话的帖子,这次在它的基础上对请求方法简单封装一下,可以达到复用的效果
1.先定义登录方法
在登录方法中利用session跨请求保持会话,并返回session,login_ApprExclusive.py代码如下:
# coding:utf-8
import requests
class Login:
"""定义登录方法"""
@staticmethod
def test_login():
s = requests.session()
jar = requests.cookies.RequestsCookieJar() # 创建一个Cookie Jar对象
jar.set('49BAC005-7D5B-4231-8CEA-16939BEACD67', 'cktest001') # 向Cookie Jar对象中添加cookie值,这是登录的cookies
jar.set('JSESSIONID', 'ED2D58E3B438CC7597CB52CD31489914')
jar.set('JSESSIONIDSSO', 'D16E59009557B82F5D5885DC4DAA0179')
s.cookies.update(jar) # 把cookies追加到Session中
return s # 返回携带cookies的session
2.定义请求方法
把get和post请求方法进行封装,注意这里不是用requests来发送请求了,而是用上一步登录方法中返回的session来发送,这样就达到了跳过验证码登录的目的(使用登录后的session会话发送请求)
Run_Method.py的代码如下:
# coding:utf-8
import json
from case.login.login_ApprExclusive import Login
class RunMain:
def __init__(self):
self.s = Login() # 获取登录方法中的session
def send_post(self, url, header, data):
r = self.s.test_login().post(url=url, headers=header, data=data, verify=False) # 使用session发送请求
result = r.json()
return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False)
# return result
def send_get(self, url, header, data):
r = self.s.test_login().get(url=url, headers=header, params=data, verify=False)
result = r.json()
# print(type(result))
return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False)
# return result
def run_main(self, url, method, header=None, data=None):
r = None
if method == 'GET':
r = self.send_get(url, header, data)
else:
r = self.send_post(url, header, data)
return r
3.测试一个接口
测试代码如下:
# coding:utf-8
import unittest
from common_util.run_method import RunMain # 从之前封装的文件中,引入RunMain类
class ModuleList(unittest.TestCase):
def setUp(self):
self.run = RunMain()
self.url = 'http://localhost:8088/consult/saveConsult.do'
self.header = {
"Host": "localhost.:8088",
"Connection": "keep-alive",
"Content-Length": "89",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Origin": "http://localhost.:8088",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Referer": "http://localhost.:8088/ApprExclusive/appr/enterprise/info/consult/toConsultEdit.do",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.8"
}
def test01(self):
"""录入一条咨询"""
data = {
'clientCode': 'test',
'topic': 'topic',
'content': 'test',
'resrcType': '0'
}
r = self.run.run_main(self.url, 'GET', self.header, data)
print(r)
if __name__ == '__main__':
unittest.main()
ok,到此结束。
绕过cookies进行登录并封装请求方法的更多相关文章
- Vue之优化封装请求方法
Vue之优化封装请求方法 对于代码中的请求操作 1.接口请求可能需要重用 2.实际工作中,接口非常容易变动, 改起来很麻烦! 我们建议的做法是把所有的请求都封装成函数然后统一的>###组织到模块 ...
- axios浏览器异步请求方法封装 XMLHttpRequest
axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ...
- axios请求方法封装.
axios的使用上一般封装好对应的方法,ES6导出,直接调用,消息通知使用了ElementUI的Message组件. 这是一个封装了axios的Rest风格的工具类,包扩常用的POST,GET,PUT ...
- 基于promise对小程序http请求方法封装
原因是我不想每次请求都复制粘贴那么长的请求地址,所以我把前边那一坨请求地址作为基础地址,只传后台给的路由就ok,而且,并不是每次请求都要显示正在加载,这对小程序体验很差,所以,我加了个形参,用来判断是 ...
- 通用ajax请求方法封装,兼容主流浏览器
ajax简单介绍 没有AJAX会怎么样?普通的ASP.Net每次运行服务端方法的时候都要刷新当前页面. 假设没有AJAX,在youku看视频的过程中假设点击了"顶.踩".评论.评论 ...
- PHP——封装Curl请求方法支持POST | DELETE | GET | PUT 等
前言 Curl: https://www.php.net/manual/en/book.curl.php curl_setopt: https://www.php.net/manual/en/fun ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-3.登录检验JWT实战之封装通用方法
笔记 3.登录检验JWT实战之封装通用方法 讲解:引入相关依赖并开发JWT工具类 1.加入相关依赖 <!-- JWT相关 --> <dependenc ...
- 九、封装登录POST请求、登录后POST请求以及GET请求
一.封装登录后POST请求以及GET请求 /** * 全局运行时环境参数管理器 */ public static Map<String, String> BASE_GLOBAL_MAP; ...
- uniapp请求方法的封装
之前在接触uniapp做小程序项目时候,因为不太熟悉,遇到了不少尴尬的时刻,请求方法的封装算是灵魂啊有木有,今天看到有人问题,就把我自己写的发出来让大家参考一下吧. 请求方法的封装我一般用的是prom ...
随机推荐
- grep 正则匹配
\{0,n\}:至多n次 \{\ 匹配/etc/passwd文件中数字出现只是数字1次到3次 匹配/etc/grub2.cfg文件以一个空格开头匹配一个字符的文件的所有行 显示以LISTEN结尾的行 ...
- 在linux下手动安装 apache, php, mysql--终极版
在linux下手动安装 apache, php, mysql: 参考: http://www.cnblogs.com/lufangtao/archive/2012/12/30/2839679.html ...
- Java中 System.arraycopy() 和 Arrays.copyOf()方法
System.arraycopy() 和 Arrays.copyOf()方法 阅读源码的话,我们就会发现 ArrayList 中大量调用了这两个方法.比如:我们上面讲的扩容操作以及add(int in ...
- oracle 之 连接查询
where 连接 select * from a,b //使用的是笛卡尔乘积 显示 a.count*b.count 条数 select * from a,b where a.id=b.id 其实只是 ...
- 强化学习策略梯度方法之: REINFORCE 算法(从原理到代码实现)
强化学习策略梯度方法之: REINFORCE 算法 (从原理到代码实现) 2018-04-01 15:15:42 最近在看policy gradient algorithm, 其中一种比较经典的 ...
- Component 组件props 属性设置
props定义属性并获取属性值 html <div id="app"> <!-- 注册一个全局逐渐 --> <!-- 注意如果自定义的属性带-像下面这 ...
- 《机器学习实战》之k-近邻算法(改进约会网站的配对效果)
示例背景: 我的朋友海伦一直使用在线约会网站寻找合适自己的约会对象.尽管约会网站会推荐不同的人选,但她并不是喜欢每一个人.经过一番总结,她发现曾交往过三种类型的人: (1)不喜欢的人: (2)魅力一般 ...
- MySQL GROUP BY语句
GROUP BY 语句根据一个或多个列对结果集进行分组 在分组的列上我们可以使用COUNT.SUM.AVG等函数 SELECT column_name,function(column_name) FR ...
- 关于PS抠图的各种方法 有这个就可以去面试了!!!加油!!!
今天和大家说说关于PS抠图的方法 高手也就如此 你值得拥有!!好了 废话不多说 下面进入正题 首先:我们得分析所给的图 然后运用不同的方法,当然也可以相互灵活运用 1:不抠图 2:万能抠图方法:快速 ...
- ERR! registry error parsing json
报错日志: ERR! registry error parsing json ERR! registry error parsing json 解决过程: 从github上克隆一个项目,在npm i的 ...