requests是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。
每次发送请求,都会调用requests库。既然如此,第一步就来封装请求
新建requests_util.py文件
- _test_encode方法:处理接口返回值中unicode编码
- send_request方法:发送请求。有的项目使用cookie做接口关联,可以使用
requests.utils.dict_from_cookiejar(response.cookies)将cookie提取,存公共参数文件中 - execute_request方法:执行请求
class RequestsUtil:
def __init__(self):
pass
@classmethod
def _test_encode(cls, res_text):
"""
处理接口返回值中, 出现unicode编码 \\u767d
:param res_text: 接口返回值
:return: 处理后的返回值
"""
match = re.search(r"\\u[0-9a-fA-F]{4}", res_text)
if match:
result = res_text.encode().decode('unicode_escape')
else:
result = res_text
return result
def send_request(self, **kwargs):
"""
发送请求
:param kwargs: 请求参数
:return:
response: 请求响应
"""
with requests.Session() as session:
response = None
try:
# 发送请求
response = session.request(**kwargs)
# 获取响应中的cookie
set_cookie = requests.utils.dict_from_cookiejar(response.cookies)
# 如果存在cookie, 将cookie写入yaml文件中
if set_cookie:
# print(f'获取到cookie: {set_cookie}')
write_extract_yaml({'Cookie': set_cookie})
res = self._test_encode(response.text)
# print(res)
except requests.exceptions.ConnectionError:
print('接口请求异常,可能是request的链接过多或者速度过快导致程序报错! ')
except requests.exceptions.RequestException as e:
print('请求异常,请检查系统数据是否正常!')
return response
def execute_request(self, name, method, url, headers=None, cookies=None, files=None, **kwargs):
"""
执行请求
:param name: 接口名称
:param method: 请求方式
:param url: 请求地址
:param headers: 请求头
:param cookies: cookies
:param files: 文件上传
:param kwargs: 请求参数 如data、json、params等
:return:
"""
response = self.send_request(
method=method,
url=url,
headers=headers,
cookies=cookies,
files=files,
timeout=10,
verify=True,
**kwargs)
return response
封装requests库后,之间的接口就可以直接调用execute_request方法,传入参数,发送请求
class DemoCase:
access_token = ''
# 登录接口
def test_login(self):
url = "https://api.weixin.qq.com/cgi-bin/token"
params = {
"grant_type": "client_credentialxxxxxxxxxxxxxxxx",
"appid": "wx2a3d01a57cd117f4xxxxxxxxxxxxxxxxxxxx",
"secret": "938fa8f53264eecf325dcd67546c747exxxxx"
}
res = RequestsUtil().execute_request(name=None, method="get", url=url, params=params)
return_data = res.json()
extract_data = {"access_token": return_data['access_token']}
# 把中间变量(token)写入extract文件
DemoCase.access_token = return_data['access_token']
print(res.json())
# 查询标签接口
def test_select(self):
url = "https://api.weixin.qq.com/cgi-bin/tags/get?access_token"
params = {
'access_token': DemoCase.access_token
}
res = RequestsUtil().execute_request(name=None, method="get", url=url, params=params)
print(res.json())

2014

被折叠的 条评论
为什么被折叠?



