首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
V2EX  ›  云计算

生成腾讯云的鉴权签名的 Python 代码,一直验证失败,有没有使用过的大佬帮忙看一下?

  •  
  •   Nick2VIPUser · 140 天前 · 1687 次点击
    这是一个创建于 140 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据文档提供的方法生成签名后,请求 API 一直返回 4100-验证失败。
    有没有用过的大佬帮忙看看哪里出了问题?
    参考的文档是这个: https://cloud.tencent.com/document/api/271/2053

    谢谢

    import requests
    import os
    import time
    import random
    import urllib.parse
    import hashlib
    import hmac
    import base64
    
    
    # HmacSHA256 加密算法
    def Hmac_SHA256(string, key):
        string_b = bytes(string, encoding="utf-8")
        key_b = bytes(key, encoding="utf-8")
        signature = base64.b64encode(hmac.new(key=key_b, msg=string_b, digestmod=hashlib.sha256).digest())
        return signature.decode("utf-8")
    
    
    # 请求 API
    def req_api():
        # 生成通用参数
        nonce = str(random.randint(1, 65535))
        timestamp = str(int(time.time()))
        region = "sz"
        action = "TextSentiment"
        # 密钥
        TX_SecretKey = os.getenv("TX_SecretKey")
        TX_SecretId = os.getenv("TX_SecretId")
        # 请求方式
        method = "GET"
    
        # 组合字符串
        url = "wenzhi.api.qcloud.com/v2/index.php"
        params = {
            "Action": action,
            "Nonce": nonce,
            "Region": region,
            "SecretId": TX_SecretId,
            "SignatureMethod": "HmacSHA256",
            "Timestamp": timestamp,
        }
        params_string = urllib.parse.urlencode(params)
        src_string = "{}{}?{}".format(method, url, params_string)
        print(src_string)
        # 使用 hamxsha256+base64 生成签名
        sign_string = Hmac_SHA256(src_string, TX_SecretKey)
        print("Signature is {}".format(sign_string))
    
        url = "https://wenzhi.api.qcloud.com/v2/index.php"
        params = {
            "Action": action,
            "Nonce": nonce,
            "Region": region,
            "SecretId": TX_SecretId,
            "Timestamp": timestamp,
            "Signature": sign_string,
            "content": "双万兆服务器就是好,只是内存小点",
        }
    
        response = requests.get(url, params=params, verify=False)
        print(response.text)
    
    if __name__ == '__main__':
        req_api()
    
    8 回复  |  直到 2018-05-07 13:10:08 +08:00
        1
    tencentcloud   140 天前 via iPhone   ♥ 1
    楼主您好,收到您的反馈啦,如您方便,关于报错 4100-验证失败的问题,欢迎您登录官网控制台提交工单,会有专家为您高效解决。感谢您的反馈与支持。
        2
    Nick2VIPUser   140 天前 via iPhone
    @tencentcloud 好的,谢谢🙏
        3
    GoLand   140 天前   ♥ 1


    用文档里给的数据试了下。参数排序那步你就漏了。
        4
    zyxbcde   139 天前 via Android   ♥ 1
    腾讯云有 sdk 啊,好像用起来挺简单的。
        5
    Nick2VIPUser   139 天前 via iPhone
    @GoLand 谢谢!确实漏掉了,我再试一下!
        6
    Nick2VIPUser   139 天前 via iPhone
    @zyxbcde 我去看下,谢谢哈
        7
    zjp   139 天前 via Android   ♥ 1
    前几个星期刚写过
    注意文档示例里对参数排序是不区分公共参数和接口参数的,但我发现翻译接口需要分开排序。如果还是始终签名不对,可以试试
        8
    StatLee   138 天前
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1768 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 16ms · UTC 09:00 · PVG 17:00 · LAX 02:00 · JFK 05:00
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1