zoukankan      html  css  js  c++  java
  • request模块封装

    import requests
    import hashlib
    import time
    import os
    import json
    
    
    class requestsTools:
    
        def __init__(self, basePath):
            self._basePath = basePath
            self._headers = {}
            self._cookies = {}
            self._file_suffix = '.html'
    
        @property
        def basePath(self):
            return self._basePath
    
        @basePath.setter
        def basePath(self, basePath):
            self._basePath = basePath
    
        @property
        def headers(self):
            return self._headers
    
        @headers.setter
        def headers(self, headers):
            self._headers = headers
    
        @property
        def cookies(self):
            return self._cookies
    
        @cookies.setter
        def cookies(self, cookies):
            self._cookies = cookies
    
        def updateCookies(self, setCookies):
            for k in setCookies:
                self._cookies[k] = setCookies[k]
    
        @property
        def file_suffix(self):
            return self._file_suffix
    
        @file_suffix.setter
        def file_suffix(self, suffix):
            self._file_suffix = suffix
    
        def _get_md5(self, str):
            '''获取md5加密电子指纹'''
            _md5 = hashlib.md5()
            _md5.update(str)
            return _md5.hexdigest()
    
        def _get_timeStr(self, len=10):
            s = str(time.time())[:len]
            return s
    
        def _get_filePath(self, method, url, isUnique, toFile, fileName, **kwargs):
            if not toFile:
                return None
            else:
                if not fileName:
                    if method == 'POST':
                        if isUnique:
                            _str = url + json.dumps(kwargs.get("postData", {})) + self._get_timeStr()
                        else:
                            _str = url + json.dumps(kwargs.get("postData", {}))
    
                    else:
                        if isUnique:
                            _str = url + self._get_timeStr()
                        else:
                            _str = url
                    _md5 = self._get_md5(_str.encode('utf8'))
                else:
                    _md5 = fileName
    
            _filePath = self.basePath + os.sep + _md5 + self.file_suffix
            return _filePath
    
        def _parseUrl(self, url, method="GET", postData=None, headers=None, errorTimes=3, timeout=30, allow_redirects=False,
                      *args, **kwargs):
            if not headers:
                headers = self.headers
            _errorTimes = 0  # 错误次数计数
            while True:
                if _errorTimes == errorTimes:
                    _response = None
                    break
                try:
                    if method == "POST":
                        _response = requests.post(url=url, data=postData, verify=False, headers=headers,
                                                  cookies=self.cookies, timeout=timeout, allow_redirects=allow_redirects)
                    else:
                        _response = requests.get(url=url, verify=False, headers=headers, cookies=self.cookies,
                                                 timeout=timeout, allow_redirects=allow_redirects)
                    return _response
                except Exception as e:
                    _errorTimes += 1
            return _response
    
        def _updateCookies(self, response):
            _cookies = response.cookies.get_dict()
            for k in _cookies:
                self._cookies[k] = _cookies[k]
    
        def parseUrl(self, url, method="GET", postData=None, errorTimes=3, toFile=True, fileName=None, isUnique=False,
                     timeout=30, allow_redirects=True, *args, **kwargs):
            requests.packages.urllib3.disable_warnings()  # 关闭ssl安全验证
            _filePath = self._get_filePath(method, url, isUnique, postData=postData, toFile=toFile, fileName=fileName)
    
            if _filePath and os.path.exists(_filePath):  # 判断文件是否存在,如果存在就从本地读取
                print("{} from local".format(method))
                with open(_filePath, 'r') as f:
                    _content = f.read()
                return {
                    "content": _content,
                    "filePath": _filePath,
                    "status": 200,
                    "url": url,
                    "responseRaw": None
                }
    
            print("{} from web".format(method))
            _response = self._parseUrl(url, method=method, postData=postData, headers=self.headers, errorTimes=errorTimes,
                                       timeout=timeout, allow_redirects=allow_redirects, *args, **kwargs)
            if not _response:
                _responseInfo = {}
            else:
                # 更新cookies
                self._updateCookies(_response)
                if _filePath:
                    with open(_filePath, 'w') as f:
                        f.write(_response.content.decode("utf8"))  # 保存到本地
                _responseInfo = {
                    "content": _response.content.decode("utf8"),
                    "filePath": _filePath,
                    "status": _response.status_code,
                    "url": _response.url,
                    "responseRaw": _response
                }
    
            return _responseInfo
    
  • 相关阅读:
    配置hive的元数据到Mysql中
    对部分spi控制的外设芯片需要断电再上电处理
    驱动芯片L9945的odd parity的计算方法
    bit field不具备可移植性
    multiple storage classes in declaration specifiers报错解决
    C编译器中对h文件的重重包含导致的预处理不同的问题
    linker file链接文件
    eclipse编辑器中的TODO和FIXME的使用
    解决hightec的链接文件的路径问题
    LIN开发
  • 原文地址:https://www.cnblogs.com/xujunkai/p/12308080.html
Copyright © 2011-2022 走看看