前言:

1、开放的接口为了避免被别人攻击,频繁刷接口,浪费服务器资源,这就涉及到签名(Signature)加密了

2、API 使用签名方法(Signature)对接口进行鉴权(Authentication)。每一次请求都需要在请求中包含签名信息, 以验证用户身份。

一、我们的接口请求:

1、登录的url + key(一段已知的字符串) + get请求带上固定参数(有一个变动的时间戳)拼接成新的请求链接

2、拼接之后的链接通过 hashlib.md5 加密

3、加密之后的数据就是鉴权ydtoken

5、再把这个ydtoken传到每个接口请求的参数里面去,请求才能成功    

二、鉴权的代码操作

# -*- coding:utf-8 -*-
from common import commons
import readConfig as readConfig
import hashlib


localReadConfig = readConfig.ReadConfig()


class getAuthentication(object):

    def  get_Url(self,xlse_name,name,row=0,col=1):
        '''
        从excel里面获取登录的url,账号和密码,然后 url+固定参数,拼接成新的请求链接URL
        '''
        api_v = localReadConfig.get_http('api')
        local_xls = commons.get_xls(xlse_name,name)
        url = local_xls[row][col]
        par = self.add_par()
        get_url = '/'+api_v+url + "?" + par
        return get_url


    def add_par(self):
        # 固定参数:时间戳+固定参数,拼接成 a=1&b+2&c=3 的模式
        fixed_parameter= localReadConfig.get_parameters()
        list_a=[]
        for key in dict(fixed_parameter):
            list_a.append( key+'='+fixed_parameter[key])
            list_b = '&'.join(list_a)
        return list_b

    def get_ydtoken(self,url):
        # 拼接之后的链接URL + 固定字符串 就行md5 加密,生成鉴权数据
        # print((md5str))
        key = "固定字符串"
        new_md5str = key + url
        # print(new_md5str)
        byte_md5str = bytes(new_md5str, encoding="utf8")   #必须传byte
        ydtoken =hashlib.md5(byte_md5str).hexdigest()
        return ydtoken

运行后的结果:

 

三、fiddler抓看响应时间,是加密后的数据,需要使用base64解密

代码操作

  def get(self):
        try:
            r = requests.get(self.url, headers=self.headers, params=self.params, timeout=float(timeout))
            print(r.url)
            result = decodeToBase64(r.content) #decodeToBase64封装了解密方法,每个公司都会做一些改动,就不贴出来了
            response = json.loads(result)
            # response.raise_for_status()
            return response
        except TimeoutError:
            self.logger.error("Time out!")
            return None

解码之后: