一、编写封装http请求
用pycharm新建项目名称自己随意取,比如:study_test;在项目下新增文件夹common,添加两个文件:configHttp.py、login_info.py
- configHttp.py
- post请求中 data=json.dumps(data) 也可用:json = data ;因为get请求不能传json格式的参数,post请求需要传json格式的参数
#!/usr/bin/python
# coding=utf-8
import json
import requests
class RequestMethod:
""" 定义请求类型 """
def __init__(self):
"""初始化参数"""
self.data = {}
self.files = {}
def get(self, url, data, headers):
"""
定义get方法请求
:return:
"""
try:
return requests.get(url=url, data=data, headers=headers, timeout=60)
except TimeoutError:
return print('%s get request timeout!' % url)
def post(self, url, data, headers):
"""
定义post方法请求
:return:
"""
try:
return requests.post(url=url, data=json.dumps(data), headers=headers, timeout=60)
except TimeoutError:
return print('%s post request timeout!' % url)
- login_info.py 返回接口请求结果中某个字段值:”token“,可用于下个接口请求。
- 如果想获取的字段不在返回结果最外层,例如{data:{user:{},session_id:{}}} ,现在要获取session_id则可以更改:result = resp['data']['info'] ;最后print(login_info("session_id"))
#! /usr/bin/python
# coding:utf-8
from common.configHttp import RequestMethod
def login_info(info):
url = "**********"
headers = {'Content-Type': 'application/json;charset=utf-8'}
data = {"key1":"", "key2":""}
resp = RequestMethod().post(url, data, headers).json()
# print(resp)
# req_result = json.loads(resp.text)
result = resp[info]
return result
if __name__ == '__main__':
print(login_info("token"))
- 也可以像下面这样写,如果想返回所有结果则可直接去掉['token']
#! /usr/bin/python
# coding:utf-8
from common.configHttp import RequestMethod
def login_info():
url = "**********"
headers = {'Content-Type': 'application/json;charset=utf-8'}
data = {"key1":"", "key2":""}
resp = RequestMethod().post(url, data, headers).json()
print(resp['token'])
if __name__ == '__main__':
login_info()
二、代码解释
1、login_info.py 文件封装登录接口,用于获取下个接口需要的token。
2、configHttp.py 封装接口请求的请求方式post/get,将url、data、headers参数化,不同接口在请求post/get方式的接口时,可根据接口请求类型调用configHttp.py中RequestMethod类下的方法:get、post
3、每次请求调用时,都只需要传入三个变量:url、data、headers
4、from common.configHttp import RequestMethod 中的common为目录,configHttp.py、login_info.py都在common目录下
三、补充
如果还有其他类型的请求方式,例如:patch、delete ;可按如下方式编写
def patch(self, url, data, headers):
"""
定义patch方法请求
:return:
"""
try:
return requests.patch(url=url, json=data, headers=headers, timeout=60)
except TimeoutError:
return print('%s patch request timeout!' % url)
def delete(self, url, data, headers):
"""
定义delete方法请求
:return:
"""
try:
return requests.delete(url=url, json=data, headers=headers, timeout=60)
except TimeoutError:
return print('%s delete request timeout!' % url)
网友评论