Python实现钉钉自定义机器人加签安全发送示例
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×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自定义钉钉机器人来自动化发送通知或者集成其他系统,实现企业内部的信息同步或工作流程自动化。
2020-09-17 上传
点击了解资源详情
点击了解资源详情
2023-05-14 上传
2020-09-16 上传
2018-09-19 上传
2020-09-19 上传
2023-03-07 上传
点击了解资源详情
weixin_38606294
- 粉丝: 3
- 资源: 926
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍