影刀RPA新手教程:HTTP请求与API对接完全指南——从GET到签名计算
影刀的HTTP请求指令,用得好可以实现几乎任何系统的对接——飞书、钉钉、企微、淘宝开放平台、拼多多开放平台,全都能接。
我踩过最深的坑是签名计算(淘宝/拼多多的API都要签名),这篇文章把HTTP请求的完整用法和签名计算全部讲清楚。
先装好环境
www.yingdao.com 下载,社区版免费。
装完去Chrome装影刀插件。
界面:左边指令区,中间流程区,右边属性配置区,底部日志区。
模块一:GET请求(最常用)
场景
调用一个开放API,获取数据(比如天气API、物流API)。
完整流程:
指令:HTTP请求
URL:https://api.weatherapi.com/v1/current.json?key=YOUR_KEY&q=Beijing
Method:GET
Headers(可选):
Accept:application/json
保存到变量:weather_response
解析返回的JSON:
指令:eval转JSON对象
要转换的文本:= weather_response['response']
保存到变量:weather_json
取具体字段:
指令:Python代码块
def main(args):
data = args['weather_json']
temp = data['current']['temp_c'] # 当前温度
city = data['location']['name'] # 城市名
return {'temp': temp, 'city': city}
传入参数:weather_json = 变量:weather_json
保存结果到:weather_result
模块二:POST请求(提交数据)
场景
调用一个API,提交数据(比如新建一个飞书文档、发送一条企微消息)。
[video(video-EQN39C0r-1782550330363)(type-csdn)(url-live.csdn.net/v/embed/525…)]
完整流程:
指令:HTTP请求
URL:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY
Method:POST
Headers:
Content-Type:application/json
Body:
{
"msgtype": "text",
"text": {
"content": "这是一条测试消息"
}
}
保存到变量:wecom_response
模块三:带签名的API请求(进阶)
场景
淘宝开放平台/拼多多开放平台的API,必须计算签名(把请求参数按字母排序 + AppSecret拼起来 + MD5),否则返回"签名错误"。
淘宝开放平台签名计算
签名规则:
- 所有请求参数(除了
sign)按字母升序排列 - 拼成字符串:
key1value1key2value2... - 首尾拼上AppSecret:
AppSecret + 排序后字符串 + AppSecret - 做MD5,转大写
Python代码块(完整实现):
def main(args):
import hashlib
app_key = args['app_key']
app_secret = args['app_secret']
method = args['method'] # 比如 'taobao.items.get'
fields = args['fields'] # 比如 'num_iid,title,price'
# 请求参数(不含sign)
params = {
'app_key': app_key,
'method': method,
'format': 'json',
'v': '2.0',
'timestamp': args['timestamp'],
'fields': fields,
'num_iid': args['num_iid']
}
# 按字母升序排列
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 拼成字符串
param_str = ''
for k, v in sorted_params:
param_str += k + str(v)
# 首尾拼上AppSecret
sign_str = app_secret + param_str + app_secret
# MD5 + 转大写
sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
# 把sign加到参数里
params['sign'] = sign
return {'params': params, 'sign': sign}
在影刀里调用:
指令:Python代码块
代码:上面那段
传入参数:
app_key = "你的AppKey"
app_secret = "你的AppSecret"
method = "taobao.items.get"
fields = "num_iid,title,price"
num_iid = 变量:product_id
timestamp = 变量:current_timestamp
保存结果到:sign_result
发送HTTP请求:
指令:HTTP请求
URL:https://gw.api.taobao.com/router/rest
Method:POST
Headers:
Content-Type:application/x-www-form-urlencoded
Body:= sign_result['params'] # 直接用Python返回的参数字典
保存到变量:taobao_response
模块四:拼多多开放平台签名计算
拼多多的签名规则和淘宝类似,但有个坑:access_token 不参与签名计算。
Python代码块:
def main(args):
import hashlib
client_id = args['client_id']
client_secret = args['client_secret']
access_token = args['access_token']
data_type = args['data_type'] # 比如 'pdd.ddk.goods.search'
# 请求参数(不含sign,access_token不参与签名)
params = {
'client_id': client_id,
'data_type': data_type,
'timestamp': args['timestamp'],
'access_token': access_token,
'pddpid': args['pddpid'] # 你的推广位ID
}
# 按字母升序排列(不包括sign)
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 拼成字符串
param_str = ''
for k, v in sorted_params:
param_str += k + str(v)
# 首尾拼上client_secret
sign_str = client_secret + param_str + client_secret
# MD5 + 转大写
sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
params['sign'] = sign
return {'params': params, 'sign': sign}
模块五:处理返回的分页数据
场景
API返回的数据有多页(比如淘宝API一次最多返回100条,但有1000条数据),需要自动翻页。
完整流程:
指令:获取当前时间(时间戳)
保存到变量:timestamp
指令:Python代码块(计算签名)
代码:上面的淘宝签名代码
传入参数:...(略)
保存结果到:sign_result
指令:HTTP请求(第一页)
URL:https://gw.api.taobao.com/router/rest
Method:POST
Body:= sign_result['params'] + "&page_no=1&page_size=100"
保存到变量:page1_response
指令:eval转JSON对象
要转换的文本:= page1_response['response']
保存到变量:page1_json
指令:获取JSON对象里的值
JSON对象:= page1_json
键名:total_results
保存到变量:total_count
指令:计算
公式:ceil(total_count / 100)
保存到变量:total_pages
指令:For次数循环
起始值:2
结束值:= total_pages
→ 指令:Python代码块(重新计算签名,因为timestamp变了)
→ 指令:HTTP请求(第i页)
→ 解析JSON,把数据追加到Excel
→ 等待1秒(防止API频率限制)
模块六:HTTP请求常见报错
报错1:返回"签名错误"
原因: 签名计算错了,99%是字符串拼接顺序错了。
解决:
- 确认参数是按字母升序排列(不是按值,是按key的字母顺序)
- 确认
app_secret拼在首尾(不是只拼在前面) - 确认做MD5后用
.upper()转大写(淘宝要求大写,拼多多也是)
报错2:返回"App Call Limited"(API调用超限)
原因: 淘宝/拼多多API有每天调用次数限制(淘宝好像是5000次/天,拼多多是10000次/天)。
解决:
- 在流程里加"每日调用计数":每次调用+1,超过限制就停止并通知
- 或者申请提高API调用限额(去开放平台提交工单)
报错3:HTTP请求超时(超过30秒)
原因: API服务器响应慢,或者网络不好。
解决: 在HTTP请求指令里设置超时时间:
指令:HTTP请求
URL:...
Method:...
超时时间:60 (默认30秒,改成60秒)
[video(video-uBquziyY-1782550337012)(type-csdn)(url-live.csdn.net/v/embed/524…)]
报错4:返回的数据是乱码
原因: 返回的内容是GBK编码,但影刀默认当成了UTF-8。
解决: 用Python代码块转码:
def main(args):
import chardet
raw_data = args['raw_data'] # HTTP请求返回的bytes
encoding = chardet.detect(raw_data)['encoding']

text = raw_data.decode(encoding)
return {'text': text}
模块七:子流程封装
HTTP请求+签名计算要用很多次,封装成子流程:
子流程1:淘宝API请求(通用)
- 输入参数:method、fields、额外参数(字典)
- 输出参数:API返回数据(JSON对象)
- 功能:自动计算签名、发送请求、解析JSON、处理分页
子流程2:拼多多API请求(通用)
- 输入参数:data_type、额外参数(字典)
- 输出参数:API返回数据(JSON对象)
模块八:定时任务配置
API对接的流程通常需要每天同步一次数据:
- 淘宝订单同步:每天03:00执行(凌晨API限额重置)
- 拼多多商品同步:每天04:00执行
- 物流信息查询:每30分钟执行一次
模块九:学习资源
HTTP请求+签名计算是RPA进阶的必经之路,学会了可以对接任何开放平台。
如果想看更多API对接的案例(包括钉钉、企微、飞书的完整签名计算),可以去 home.linyan.cloud 找对应的模板。
模块十:速查表
| 平台 | API域名 | 签名算法 | 每日限额 |
|---|---|---|---|
| 淘宝开放平台 | gw.api.taobao.com | MD5(参数排序+secret首尾) | 5000次/天 |
| 拼多多开放平台 | pop.pinduoduo.com | MD5(同淘宝,但token不参与) | 10000次/天 |
| 抖音开放平台 | open.douyin.com | SHA256(更复杂) | 不限(但QPS有限制) |
| 微信开放平台 | api.weixin.qq.com | 无(用access_token) | 不限制 |
| 功能 | 指令 | 注意事项 |
|---|---|---|
| 发送GET请求 | HTTP请求(Method=GET) | URL里直接带参数 |
| 发送POST请求 | HTTP请求(Method=POST) | Body可以是JSON或表单 |
| 解析JSON | eval转JSON对象 | 返回的JSON对象可以用[键名]取值 |
| 计算签名 | Python代码块 | 用hashlib.md5()计算 | | 处理分页 | For次数循环 + 重新签名 | 每次循环要重新计算签名(timestamp变了) |
#影刀RPA #HTTP请求 #API对接 #新手入门
作者:林焱