Python实现钉钉自定义机器人加签安全发送示例
83 浏览量
更新于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×tamp={}&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自定义钉钉机器人来自动化发送通知或者集成其他系统,实现企业内部的信息同步或工作流程自动化。
886 浏览量
655 浏览量
点击了解资源详情
1443 浏览量
2024-11-07 上传
579 浏览量
330 浏览量
405 浏览量
852 浏览量
weixin_38606294
- 粉丝: 3
- 资源: 926
最新资源
- MSADS_Portfolio
- Arduino-FOC:用于BLDC和步进电机的Arduino FOC-基于Arduino的磁场定向控制算法库
- TestePraticoDDD:使用受DDD(域驱动设计)实践支配的结构测试项目
- react-number-format:React组件以将数字格式化为输入形式或文本形式
- 鼠标经过图片显示文字介绍代码
- 蓝色简洁企业介绍品牌宣传PPT模板
- DETR.detectron2:基于detectron2的DETR实现
- Algorithm-GoogleCodeJam-2015.zip
- StepperDriver:用于A4988,DRV8825,DRV8834,DRV8880和通用两针(DIRSTEP)步进电机驱动器的Arduino库
- RxAnimatedCarthageExample
- 逗比测试HTML5游戏源码
- HTextView:动画效果为文本,不是真正的textview
- Flarum - PHP编写的漂亮、优雅、简洁的轻论坛.zip
- 噪音控制技术.zip
- HTML5实现的全屏图片展示效果
- Web开发问题