Python实现钉钉自定义机器人加签安全发送示例

0 下载量 54 浏览量 更新于2024-08-30 收藏 109KB PDF 举报
本文主要介绍了如何在Python中使用自定义的钉钉机器人,通过发送HTTP请求来触发机器人的消息推送功能。首先,需要在钉钉中添加自定义机器人,并获取到webhook链接以及安全设置中的密钥(secret)。然后,按照钉钉官方文档的要求,采用加签的方式来确保请求的安全性。 在Python代码中,我们需要以下步骤来实现加签过程: 1. 获取当前时间戳(单位为毫秒),这个时间戳必须与服务器接收请求的时间误差不超过1小时。 2. 使用HmacSHA256算法对`timestamp`和`secret`拼接后的字符串进行签名计算。首先将`secret`转为UTF-8编码,然后将`timestamp`和`secret`拼接成`string_to_sign`,同样对这个字符串进行UTF-8编码。 3. 使用`hmac.new()`函数,传入`secret_enc`(编码后的密钥)、`string_to_sign_enc`(编码后的拼接字符串)以及`digestmod=hashlib.sha256`来计算哈希值。 4. 将哈希值使用Base64编码,然后使用`urllib.parse.quote_plus()`对编码后的结果进行URL编码,得到最终的签名`sign`。 完成签名后,将`timestamp`和`sign`拼接到webhook URL中,形成完整的请求地址。最后,使用`requests`库发送HTTP请求,通常会设置`Content-Type`为`application/json`,并构造JSON格式的请求体来包含消息内容。 示例代码如下: ```python import time import hmac import hashlib import base64 import urllib.parse import requests timestamp = str(round(time.time() * 1000)) secret = '加签时生成的密钥' # 加签过程 secret_enc = secret.encode('utf-8') string_to_sign = f'{timestamp}\n{secret}' string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) # 拼接URL url = '生成的Webhook&timestamp={}&sign={}'.format(timestamp, sign) # 发送请求 headers = { 'Content-Type': 'application/json' } data = { 'msgtype': 'text', 'text': { 'content': '这是一条测试消息' } } response = requests.post(url, headers=headers, json=data) # 检查响应 if response.status_code == 200: print('消息发送成功') else: print('消息发送失败,错误代码:', response.status_code) ``` 这段代码中,`data`变量定义了消息的类型和内容,例如这里发送的是文本消息。你可以根据需要修改`data`结构以发送不同类型的消息,如富文本、图片、链接等。在发送请求后,检查返回的HTTP状态码来判断消息是否发送成功。 通过以上步骤,开发者可以利用Python自定义钉钉机器人来自动化发送通知或者集成其他系统,实现企业内部的信息同步或工作流程自动化。