前言:

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

解码之后:

接口的鉴权&响应数据解密的更多相关文章

  1. Spring Security 接口认证鉴权入门实践指南

    目录 前言 SpringBoot 示例 SpringBoot pom.xml SpringBoot application.yml SpringBoot IndexController SpringB ...

  2. YAPI接口自动鉴权功能部署详解

    安装准备 以下操作,默认要求自己部署过yapi,最好是部署过yapi二次开发环境. 无论是选择在线安装或者是本地安装,都需要安装client工具. 1.yapi-cli:npm install yap ...

  3. 接口的鉴权cookie、session和token

    1.HTTP是无状态协议 什么是无状态?就是说这一次的请求和上一次的请求是没有任何关系的,无法共享信息.好处就是速度快. 2.cookie.session的加入 HTTP请求是无状态的,所以解决共享信 ...

  4. 接口鉴权之sign签名校验与JWT验证

    需求描述: 项目里的几个Webapi接口需要进行鉴权,同接口可被小程序或网页调用,小程序里没有用户登录的概念,网页里有用户登录的概念,对于调用方来源是小程序的情况下进行放权,其他情况下需要有身份验证. ...

  5. EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解

    背景需求 EasyNVR的使用者应该都清楚的了解到,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理可以 ...

  6. Onvif开发之客户端鉴权获取参数篇

    前面一篇已经介绍了客户端如何发些设备,下面这篇简单介绍下在发现设备后,如何通过ONVIF协议来获取设备的相关参数 ONVIF中不管是客户端还是设备端,最先实现的接口都是关于能力的那个接口,在客户端实现 ...

  7. 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...

  8. SpringCloud 2020.0.4 系列之 JWT用户鉴权

    1. 概述 老话说的好:善待他人就是善待自己,虽然可能有所付出,但也能得到应有的收获. 言归正传,之前我们聊了 Gateway 组件,今天来聊一下如何使用 JWT 技术给用户授权,以及如果在 Gate ...

  9. 取消mod_sofia的呼叫鉴权

    FreeSWITCH中默认的SIP呼叫是要鉴权的,流程如下. 终端 FreeSWITCH A -----Invite------> FS A <----Trying------ FS A ...

随机推荐

  1. python3-----多进程、多线程、多协程

    目前计算机程序一般会遇到两类I/O:硬盘I/O和网络I/O.我就针对网络I/O的场景分析下python3下进程.线程.协程效率的对比.进程采用multiprocessing.Pool进程池,线程是自己 ...

  2. Fiddler抓包—搞定接口测试

    ·包的定义   在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接受者的地址信息.这些包然后沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合.   ·应用   简 ...

  3. Maximum Questions CodeForces - 900E (字符串,dp)

    大意:给定长$n$的字符串$s$, 只含'a','b','?', '?'可以替换为任意字符, 在给定长$t$的字符串, "ababab...", 求替换尽量少的'?', 使得$s$ ...

  4. SWUST OJ(954)

    单链表的链接 #include <stdio.h> #include <stdlib.h> typedef struct LinkNode //单链表节点结构的定义 { cha ...

  5. Oracle 11.2.0.4.0 Dataguard部署和日常维护(7) - Dataguard Flashback篇

    1. 设置备库的闪回目录 show parameter db_recovery_file; NAME TYPE VALUE ------------------------------------ - ...

  6. 解决PLSQL Developer 插入中文 乱码问题(转)

    原文地址:解决PLSQL Developer 插入中文 乱码问题 PLSQL Developer 插入中文 乱码问题,如图     这个是由于oracle服务器端字符编码 和 Oracle 客户端 字 ...

  7. Oracle12c中容错&amp;性能新特性之表空间组

    1.        简介 表空间组可以使用户消耗来自多个表空间的临时表空间.表空间组有如下特点: 1)      至少包含一个表空间.表空间组中包含的最大表空间数没有限制. 2)      和表空间共 ...

  8. dynamic load jar and init spring

    public class SpringLoader { private Map<String, Class<?>> classMap = new HashMap<> ...

  9. 使用python将excel数据导入数据库

    使用python将excel数据导入数据库 因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接 ...

  10. shell shell基本概述

    SHELL的概念 SHELL是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序, 用户可以用shell来启动,挂起,停止甚至是编写一些程序. ​ Shell还是 ...