之前写了一篇使用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进行登录并封装请求方法的更多相关文章

  1. Vue之优化封装请求方法

    Vue之优化封装请求方法 对于代码中的请求操作 1.接口请求可能需要重用 2.实际工作中,接口非常容易变动, 改起来很麻烦! 我们建议的做法是把所有的请求都封装成函数然后统一的>###组织到模块 ...

  2. axios浏览器异步请求方法封装 XMLHttpRequest

    axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ...

  3. axios请求方法封装.

    axios的使用上一般封装好对应的方法,ES6导出,直接调用,消息通知使用了ElementUI的Message组件. 这是一个封装了axios的Rest风格的工具类,包扩常用的POST,GET,PUT ...

  4. 基于promise对小程序http请求方法封装

    原因是我不想每次请求都复制粘贴那么长的请求地址,所以我把前边那一坨请求地址作为基础地址,只传后台给的路由就ok,而且,并不是每次请求都要显示正在加载,这对小程序体验很差,所以,我加了个形参,用来判断是 ...

  5. 通用ajax请求方法封装,兼容主流浏览器

    ajax简单介绍 没有AJAX会怎么样?普通的ASP.Net每次运行服务端方法的时候都要刷新当前页面. 假设没有AJAX,在youku看视频的过程中假设点击了"顶.踩".评论.评论 ...

  6. 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 ...

  7. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-3.登录检验JWT实战之封装通用方法

    笔记 3.登录检验JWT实战之封装通用方法     讲解:引入相关依赖并开发JWT工具类 1.加入相关依赖 <!-- JWT相关 -->             <dependenc ...

  8. 九、封装登录POST请求、登录后POST请求以及GET请求

    一.封装登录后POST请求以及GET请求 /** * 全局运行时环境参数管理器 */ public static Map<String, String> BASE_GLOBAL_MAP; ...

  9. uniapp请求方法的封装

    之前在接触uniapp做小程序项目时候,因为不太熟悉,遇到了不少尴尬的时刻,请求方法的封装算是灵魂啊有木有,今天看到有人问题,就把我自己写的发出来让大家参考一下吧. 请求方法的封装我一般用的是prom ...

随机推荐

  1. 02: CMDB设计思路

    1.1 cmdb理解   参考博客:https://www.cnblogs.com/laowenBlog/p/6825420.html   参考博客2:https://www.cnblogs.com/ ...

  2. Codeforces 888G Xor-MST - 分治 - 贪心 - Trie

    题目传送门 这是一条通往vjudge的高速公路 这是一条通往Codeforces的高速公路 题目大意 给定一个$n$阶完全图,每个点有一个权值$a_{i}$,边$(i, j)$的权值是$(a_{i}\ ...

  3. 数据库 --- 4 多表查询 ,Navicat工具 , pymysql模块

    一.多表查询 1.笛卡儿积 查询 2.连接 语法: ①inner    显示可构成连接的数据 mysql> select employee.id,employee.name,department ...

  4. Installing Jenkins as a Windows service

    Install Jenkins as a Windows service NOTE: if you installed Jenkins using the windows installer, you ...

  5. Delphi XE5 for Android (十)

    我觉得Delphi最强大的的功能之一就是开发数据库三层应用的DataSnap,在Android上的实现,首先是完成服务器的设计: (1)利用向导完成DataSnap服务器的框架,如下图: 由于是实验, ...

  6. HTTP 压力测试工具

    http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般不会 ...

  7. Flutter基础用法解析

    解析开始 Flutter中一切皆widget,一切皆组件.学习Flutter中,必须首先了解Flutter的widget.先从最基本的MaterialApp和Scaffold开始了解 1 Materi ...

  8. UVA 818 Cutting Chains(状压 + 暴搜)题解

    题意:有1~n个小环,他们中的有些互相扣在一起,问你至少切开几个能把这写小环串成一条链 思路:还是太菜了,题目给的n<=15,显然可以暴力解决. 用二进制表示每个环切还是不切,然后搜索所有情况. ...

  9. RHEL7和RHEL6即时设置、开启和开机、永久开启服务的方法、原理(例子:端口与Nginx冲突的Apache httpd服务的关闭)

    1.RHEL7 说明:启用服务就是在当前 runlevel 的配置文件目录/etc/systemd/system/multi-user.target.wants/里,建立/usr/lib/system ...

  10. CentOS7设置定时任务 每隔30分钟执行一次命令

    ref   https://blog.csdn.net/xiangxianghehe/article/details/78149094 一.安装 crontabs服务并设置开机自启: yum inst ...