首页 > 编程语言 > 详细

python对接口sign签名操作

时间:2020-08-26 22:00:09      阅读:139      评论:0      收藏:0      [点我收藏+]

描述

一般公司对外的接口都会用到sign签名,对不同的客户提供不同的apikey ,这样可以提高接口请求的安全性,避免被人抓包后乱请求。
sign签名是一种很常见的方式

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import urllib.parse
import hashlib
import requests
import json

#_______________________签名方式一___________________________________________________
def sign_body(body, apikey):
    ‘‘‘请求body sign签名‘‘‘
    # 列表生成式,生成key=value格式
    a = ["".join(i) for i in body.items() if i[1] and i[0] != "sign"]
    # print(a)
    # 参数名ASCII码从小到大排序
    strA = "".join(sorted(a))
    # 在strA后面拼接上apiKey得到striSignTemp字符串
    striSignTemp = strA+apikey

    # MD5加密
    def jiamimd5(src):
        m = hashlib.md5()
        m.update(src.encode(UTF-8))
        return m.hexdigest()
    sign = jiamimd5(striSignTemp.lower())
    # 得到sign签名后新的body值
    body["sign"] = sign
    return body

if __name__ == __main__:
    apikey = "12345678"  # 验证密钥,由开发提供
    body = {
        "username": "test",
        "password": "123456",
        "mail": "",
        "sign": ""
    }
    print(sign_body(body, apikey=apikey))


##_____________________________签名方式二___________________________________
def _getSign(params, key):
    change = ksort(params)
    encode_param = urllib.parse.urlencode(change)
    decode_param = urllib.parse.unquote_plus(encode_param)
    encode_str = decode_param + key
    m = hashlib.md5()
    m.update(encode_str.encode(utf-8))
    sign = m.hexdigest()
    return sign

def ksort(d):
    return [(k,d[k]) for k in sorted(d.keys())]

if __name__ == __main__:
    key=288jieu439ji2hik48je3jlo9806hw1
    body = {
        "username": "test",
        "password": "123456"
    }
    body[sign]=_getSign(body,key)
    print(body)



##_______________________案例操作________________________________________

def _getSign(params, key):
    change = ksort(params)
    encode_param = urllib.parse.urlencode(change)
    decode_param = urllib.parse.unquote_plus(encode_param)
    encode_str = decode_param + key
    m = hashlib.md5()
    m.update(encode_str.encode(utf-8))
    sign = m.hexdigest()
    return sign

def ksort(d):
    return [(k,d[k]) for k in sorted(d.keys())]

def get_address(name,time):
    data = {
        "_name": name,
        "_time": time
    }
    key=288jieu439ji2hik48je3jlo9806hw1 #开发提供的key
    data[sign]=_getSign(data,key)#调用签名函数
    print(data)#加密
    r=requests.post(http://127.0.0.1:8000/addes,params=data)
    _json=json.loads(r.text)
    print(_json)

if __name__ == __main__:
    get_address(李小龙, 1523803489)

 

python对接口sign签名操作

原文:https://www.cnblogs.com/chen-xia/p/13567731.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!