基于requests的二次封装

Posted zh-x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于requests的二次封装相关的知识,希望对你有一定的参考价值。

## 基础方法的封装

### 基础环境的管理

> 使用yml文件做环境、配置管理

<!--env.yml-->

```yaml
QA: http://qa.baidu.com
UAT: http://uat.baidu.com
Prod: Http://www.baidu.com
```

<!--load_yaml.py-->

```python
import yaml
import os


def get_host(env=‘QA‘):
filename = os.path.join(os.path.dirname(__file__), ‘env.yml‘).replace(
"\\", "/")
with open(filename, ‘r‘, encoding=‘utf-8‘) as f:
hosts = yaml.load(f.read())
return hosts.get(env, None)
```

<!--test_load_yaml.py-->

```python
import pytest
from load_yaml import get_host


def test_host_in_yaml():
result = get_host(‘QA‘)
assert result == ‘http://qa.baidu.com‘


def test_host_not_in_yaml():
result = get_host(‘Dev‘)
assert result is None
```

### 日志模块

> 通过装饰器实现日志模块

<!--api_log.py-->

```python
import logging

logging.basicConfig(format=‘[%(asctime)s] %(message)s‘, level=logging.INFO)


def logger(func):
‘‘‘
Add some log information before function run and after function run
‘‘‘

def wrapper(*arg, **kw):
logging.info("Begin to execute function: and parameter was ,".
format(func.__name__, arg, kw))
func(*arg, **kw)
logging.info("Finish executing function: ".format(func.__name__))

return wrapper
```

### 基础功能封装

<!--Session.py-->

```python
from requests import Session

def get_session():
with Session as s:
return s
```

<!--api_helpper.py-->

```python
from requests import Session
import logging

logging.basicConfig(format=‘[%(asctime)s] %(message)s‘, level=logging.INFO)


def get_session():
with Session() as s:
return s


class BaseApi(object):
def __init__(self, session):
self.session = session
self.timeout = 30
self.verify = False

def _get(self, url, params, header=):
try:
logging.info("Start to request ‘‘".format(url))
response = self.session.get(
url=url,
params=params,
timeout=self.timeout,
verify=self.verify,
headers=header)
logging.info("The request parameter was ‘‘".format(params))
logging.info("The response status code was ‘‘".format(
response.status_code))
except Exception as e:
response = ‘‘.format(e)
logging.error(
"The request was failed, error message was ‘‘".format(e))
finally:
return response
```

 

## 业务方法的封装

<!--BaiDu.py-->

```python
class BaiDu(BaseApi):
def get_baidu_index(self, host=r‘http://www.baidu.net‘, uri=r‘/‘):
response = self._get(‘‘.format(host, uri), params=None)
return response.text, response.status_code
```

以上是关于基于requests的二次封装的主要内容,如果未能解决你的问题,请参考以下文章

axios基于常见业务场景的二次封装

iOS(Swift) 基于 Moya 的二次封装

基于Glide的二次封装

基于Senparc的二次封装

react axios的二次封装

vue中axios的二次封装