Fetch
封装requests,会话控制与接口交互管理
API说明
写python大家都会用requests发起请求,但是对于复杂的情况,直接用requests就会显得很复杂,比如:内网环境使用系统pac代理、保持会话、请求失败再次尝试、请求代理等,这些都是数据采集开发中常常遇到的问题,使用PYSunday的Fetch API来开发网页接口数据请求可以不用考虑这些问题
sunday.core.Fetch
(pacWifi=None, pacUrl=None, pacWifiName=None, proxy=None)对requests进行封装,实现内网环境使用系统pac代理、保持会话、请求失败再次尝试、请求代理、返回结果安全json化等
Args:
session: 会话变量
jsonErrorNumber: json错误编号
jsonErrorMessage: json错误提示文本
Usages:
>>> from sunday.core.fetch import Fetch
>>> fetch = Fetch()
>>> fetch.get('https://www.baidu.com')
<Response [200]>
Args:
pacWifi(str): wifi名称,如果当前网络连入的wifi相同则使用pac代理
pacUrl(str): url地址,尝试请求该url,如果能请求到则使用pac代理,一般为内网链接
proxy(str): 让请求使用代理,传入如:127.0.0.1:8888
或者https://127.0.0.1:5555/getProxy
Return: fetch
add_header
(self, headers)设置全局请求头 Args: headers(dict): 添加到请求头的字典
get
(self, *args, **kwargs)发起get请求并对返回结果调用json方法,调用方式与requests.get一致 Args: timeout_time(int): 超时尝试次数,默认为3次
post
(self, *args, **kwargs)发起post请求并对返回结果调用json方法,调用方式与requests.post一致 Args: timeout_time(int): 超时尝试次数,默认为3次
get_json
(self, *args, **kwargs)发起get请求并对返回结果调用json方法,调用方式与requests.get一致,由于对json方法做了安全处理建议在预期返回json数据的接口使用 Args: timeout_time(int): 超时尝试次数,默认为3次
post_json
(self, *args, **kwargs)发起post请求并对返回结果调用json方法,调用方式与requests.post一致,由于对json方法做了安全处理建议在预期返回json数据的接口使用 Args: timeout_time(int): 超时尝试次数,默认为3次
getCookiesDict
(self)将cookie转化为字典并返回 Return: dict
setCookie
(self, name, value, domain, rest={}, **argvs)增加新的cookie, 入参参考cookielib.Cookie中的定义 Args: name(str): cookie键名 value(str): cookie键值 domain(str): 主机名
setJsonError
(self, jsonErrorMessage='服务器异常请稍后重试!', jsonErrorNumber=99999)设置get_json与post_json方法中执行json化失败的报错配置,若配置后返回非json数据则直接报错
Args:
jsonErrorMessage(str): 报错提示信息, 默认服务器异常请稍后重试!
jsonErrorNumber(int): 报错code编码, 默认99999
Usages:
>>> from sunday.core.fetch import Fetch
>>> fetch = Fetch()
>>> fetch.get('https://www.baidu.com')
{'sunday_error': True, 'msg': '返回结果非JSON', 'url': 'https://www.baidu.com', 'text': ''}
>>> fetch.setJsonError()
>>> fetch.get('https://www.baidu.com')
CustomError: '99999 服务器异常请稍后重试!'
提示
每个Fetch实例都是一个会话,如果同网站涉及cookie的请求请使用同一个Fetch实例
示例
1. 模拟多个客户端发起请求
通过设置代理和请求头的User-Agent
值模拟不同的客户端,如下:
from sunday.core.fetch import Fetch
client = Fetch(proxy='101.102.103.104:8888')
client.add_header({
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0',
})
print(client.get_json('http://httpbin.org/get'))
"""
{
'args': {},
'headers': {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Host': 'httpbin.org',
'Pragma': 'no-cache',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0',
'X-Amzn-Trace-Id': 'Root=1-63db4b51-2de83d893867d9636863e056'
},
'origin': '101.102.103.104',
'url': 'http://httpbin.org/get',
}
"""
2. 设置超时时间及重试次数
from sunday.core.fetch import Fetch
fetch = Fetch()
fetch.get('http://www.baidu.com', timeout=60, timeout_time=10)