'''
http_request是主方法,直接供外部调用
__http_get, __http_post是实际底层分类调用方法
参考王浩然大大的python接口自动化
'''
import requests
import os
import logging
import sys
import config
# config是自己定义的路径文件,内容如下
'''
# 返回当前代码所在目录的上级目录
src_path=os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
'''
class RequestInterface(object):
# 定义处理不同类型的请求参数、包含字典、字符串、空值
def __new_param(self,param):
try:
if isinstance(param,str) and param.startwith('{'):
new_param=eval(param)
elif param==None:
new_param=''
else:
new_param=param
except Exception as error:
new_param=''
logging.basicConfig(filename=config.src_path+'/log/syserror.log',level=logging.DEBUG,format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
logger=logging.getLogger(__name__)
logger.exception(error)
return new_param
# post请求,参数在body中
def __http_post(self,interface_url,interface_param):
'''
interface_url:接口地址
interface_param:接口请求参数
return 返回字典形式结果
'''
try:
if interface_url!='':
temp_interface_param=self.__new_param(interface_param)
response=requests.post(url=interface_url,params=temp_interface_param,verify=False,timeout=10)
if response.status_code==200:
result={'code':'0000','message':'成功','data':response.text}
else:
result={'code':'2004','message':'接口返回状态错误','data':[]}
elif interface_url=='':
result={'code':'2002','message':'接口地址参数为空','data':[]}
else:
result={'code':'2003','message':'接口地址错误','data':[]}
except Exception as e:
result={'code':'9999','message':'系统异常','data':[]}
logging.basicConfig(filename=config.src_path+'/log/syserror.log',level=logging.DEBUG,format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
logger=logging.getLogger(__name__)
logger.exception(e)
return result
# get请求,参数在接口地址后面
def __http_get(self,interface_url,interface_param):
'''
interface_url:接口地址
interface_param:接口请求参数
return 返回字典形式结果
'''
try:
if interface_url!='':
temp_interface_param=self.__new_param(interface_param)
# requrl=interface_url+temp_interface_param
response=requests.get(url=interface_url,params=temp_interface_param,verify=False,timeout=10)
if response.status_code==200:
result={'code':'0000','message':'成功','data':response.text}
else:
result={'code':'3004','message':'接口返回状态错误','data':[]}
elif interface_url=='':
result={'code':'3002','message':'接口地址参数为空','data':[]}
else:
result={'code':'3003','message':'接口地址错误','data':[]}
except Exception as e:
result={'code':'9999','message':'系统异常','data':[]}
logging.basicConfig(filename=config.src_path+'/log/syserror.log',level=logging.DEBUG,format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
logger=logging.getLogger(__name__)
logger.exception(e)
return result
# 统一处理http请求
def http_request(self,interface_url,interface_param,request_type):
'''
interface_url:接口地址
interface_param:接口请求参数
request_type:请求类型
return 返回字典形式结果
'''
try:
if request_type=='get' or request_type=='GET':
result=self.__http_get(interface_url,interface_param)
elif request_type=='post' or request_type=='POST':
result=self.__http_post(interface_url,interface_param)
else:
result={'code':'1000','message':'请求类型错误','data':request_type}
except Exception as e:
result={'code':'9999','message':'系统异常','data':[]}
logging.basicConfig(filename=config.src_path+'/log/syserror.log',level=logging.DEBUG,format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s%(message)s')
logger=logging.getLogger(__name__)
logger.exception(e)
return result
# https://www.baidu.com/s?wd=%E6%B5%8B%E8%AF%95%E5%B8%B8%E7%94%A8%E5%88%B0%E6%8E%A5%E5%8F%A3%E5%9C%B0%E5%9D%80
requestDemo=RequestInterface()
url='https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?'
param={'tel':'186xxxxxxx'}
result=requestDemo.http_request(url,param,'post')
print(result['data'])