影刀RPA新手教程:HTTP请求与API对接完全指南——从GET到签名计算

0 阅读7分钟

影刀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:

指令:evalJSON对象
  要转换的文本:= 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),否则返回"签名错误"。

淘宝开放平台签名计算

签名规则:

  1. 所有请求参数(除了sign)按字母升序排列
  2. 拼成字符串:key1value1key2value2...
  3. 首尾拼上AppSecret:AppSecret + 排序后字符串 + AppSecret
  4. 做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请求(第一页)
  URLhttps://gw.api.taobao.com/router/rest
  MethodPOST
  Body:= sign_result['params'] + "&page_no=1&page_size=100"
  保存到变量:page1_response

指令:evalJSON对象
  要转换的文本:= 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']
    ![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/04517cfd123e4c58846bd638f69100c7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5p6X54SxUlBB:q75.awebp?rk3s=f64ab15b&x-expires=1786468678&x-signature=L5P9QRvdstM5h%2B6XeyZ4svao94M%3D)

    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.comMD5(参数排序+secret首尾)5000次/天
拼多多开放平台pop.pinduoduo.comMD5(同淘宝,但token不参与)10000次/天
抖音开放平台open.douyin.comSHA256(更复杂)不限(但QPS有限制)
微信开放平台api.weixin.qq.com无(用access_token)不限制
功能指令注意事项
发送GET请求HTTP请求(Method=GET)URL里直接带参数
发送POST请求HTTP请求(Method=POST)Body可以是JSON或表单
解析JSONeval转JSON对象返回的JSON对象可以用[键名]取值
在这里插入图片描述

| 计算签名 | Python代码块 | 用hashlib.md5()计算 | | 处理分页 | For次数循环 + 重新签名 | 每次循环要重新计算签名(timestamp变了) |


#影刀RPA #HTTP请求 #API对接 #新手入门

作者:林焱