python 做的request模块封装工具类

  • Post author:
  • Post category:python




1.python 做的request模块封装工具类

记录下,避免以后用到。


import time
from requests.adapters import HTTPAdapter
import json
import requests
from requests import exceptions

class HttpRequests(object):
     """
     eg: request = HttpRequests()
         response = request(method, url, data)
         or
         response = request.send_request(method, url, data)
         print(response.text)
    """
     def __init__(self):
        self.session = requests.Session()
        self.session.mount('http://', HTTPAdapter(max_retries=3))
        self.session.mount('https://', HTTPAdapter(max_retries=3))
        # exceptions.Timeout

     def send_request(self, method, url, data=None, params_type='JSON',  **kwargs):
         """
         request 请求封装 默认使用json格式
         """
         method = method.upper()
         params_type = params_type.upper()
         if isinstance(data, str):
             try:
                 data = json.loads(data)
             except Exception:
                     data = eval(data)
         if 'GET' == method:
             response = self.session.request(method=method, url=url, params=data, **kwargs)
         elif 'POST' == method:
             if params_type == 'FORM':  # 发送表单数据,使用data参数传递
                 response = self.session.request(method=method, url=url, data=data, **kwargs)
             elif params_type == 'JSON':  # 如果接口支持application/json类型,则使用json参数传递
                 response = self.session.request(method=method, url=url, json=data, **kwargs)
             else:  # 如果接口需要传递其他类型的数据比如 上传文件,调用下面的请求方法
                 response = self.session.request(method=method, url=url, **kwargs)
         elif 'PUT' == method:
             if params_type == 'FORM':  # 发送表单数据,使用data参数传递
                 response = self.session.request(method=method, url=url, data=data, **kwargs)
             elif params_type == 'JSON':  # 如果接口支持application/json类型,则使用json参数传递
                 response = self.session.request(method=method, url=url, json=data, **kwargs)
             else:  # 如果接口需要传递其他类型的数据比如 上传文件,调用下面的请求方法
                 response = self.session.request(method=method, url=url, **kwargs)
         elif 'DELETE' == method:
             if params_type == 'FORM':  # 发送表单数据,使用data参数传递
                 response = self.session.request(method=method, url=url, data=data, **kwargs)
             elif params_type == 'JSON':  # 如果接口支持application/json类型,则使用json参数传递
                 response = self.session.request(method=method, url=url, json=data, **kwargs)
             else:  # 如果接口需要传递其他类型的数据比如 上传文件,调用下面的请求方法
                 response = self.session.request(method=method, url=url, **kwargs)
         # 如果请求方式非 get 和post 会报错,当然你也可以继续添加其他的请求方法
         else:
             raise ValueError('request method "{}" error ! please check'.format(method))

         return response

     def __call__(self, method, url, data=None, params_type='JSON',  **kwargs):
         return self.send_request(method, url,
                                  data=data,
                                  params_type=params_type,
                                  **kwargs)

     def close_session(self):
         self.session.close()
         try:
             del self.session.cookies['JSESSIONID']
         except:
             pass

     def __del__(self):
         self.close_session()


def get_content(response=None):
    if response:
        return response.data if response.code == 200 else None
    return None

具体参考哪位的代码,忘记了,见谅。



版权声明:本文为qq_40981730原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。