文档备案控制台
免费开始使用

影刀RPA进阶教程:API与HTTP请求完全指南——GET/POST实战、Token管理与分页数据采

做了两年RPA,大部分时间在跟网页元素打交道。直到有一天老板说:“能不能把ERP系统的订单数据拉过来?”——那个ERP提供了API接口,不需要打开网页、不需要捕获元素,发一个HTTP请求就能拿到数据。

HTTP请求是RPA的“高速公路”。 不用等页面加载、不用处理弹窗、不用管XPath变不变。但前提是——你得搞清楚GET和POST的区别、Token怎么管、分页怎么处理、报错怎么看。这篇文章把API调用的完整流程讲清楚。

picture.image

一、HTTP请求基础回顾

picture.image 影刀的“HTTP请求”指令在右侧指令面板的“网络”分类下。它有5个核心参数:

参数说明常见取值
请求方式你要对服务器做什么GET(查)/ POST(增)/ PUT(改)/ DELETE(删)

picture.image | URL | 接口地址 | 可包含查询参数(?key1=val1&key2=val2)| | 请求头(Headers) | 告诉服务器你是谁、要什么格式 | Content-Type、Authorization | | 请求体(Body) | POST和PUT要发过去的数据 | JSON格式字符串 | | 返回结果保存到 | 响应结果存到哪个变量 | 自定义变量名 |

picture.image 最容易被忽略的是请求头。 我见过太多人URL填对了、方法选对了但接口返回401或者400,就是因为没填Content-Type或者Authorization。

响应结果的结构:返回的变量里包含三个字段:

  • status_code:状态码(200表示成功)
  • content_type:内容类型(如application/json)

picture.image

  • content:响应内容(JSON字符串或文本)

二、GET请求:查数据

picture.image GET请求用于获取数据,参数直接放在URL里。

实战:调用免费汇率API

有一个免费的汇率API:https://api.iyuns.com/api/allrates,返回美元和欧元兑人民币汇率。

picture.image

影刀操作步骤

  1. 拖入“HTTP请求”指令
  2. 请求方式选GET

picture.image 3. URL填https://api.iyuns.com/api/allrates

  1. 返回结果保存到变量汇率响应
  2. 用“文本转JSON对象”解析汇率响应.content
  3. 提取汇率数据写入Excel

完整配置

# 请求方式:GET
# URL:https://api.iyuns.com/api/allrates
# 请求头:(留空或填 Content-Type: application/json)
# 请求体:(GET不需要)
# 返回结果保存到:汇率响应

# 解析响应
JSON转文本(汇率响应.content) → 汇率数据
提取汇率数据.rates.USD → 美元汇率
提取汇率数据.rates.EUR → 欧元汇率

这里容易踩坑:GET请求的参数要拼在URL里,用?开头,多个参数用&连接。比如https://api.example.com/data?page=1&size=20

三、POST请求:发数据

POST请求用于提交数据,参数放在请求体(Body)里。

实战:调用登录接口获取Token

picture.image 很多API需要先登录获取Token,后续请求带上Token才能访问数据。

// POST请求体(JSON格式)
{
    "username": "test@example.com",
    "password": "your_password"
}

影刀操作步骤

  1. 拖入“HTTP请求”指令
  2. 请求方式选POST
  3. URL填登录接口地址
  4. 请求头填:Content-Type: application/json
  5. 请求体填上面的JSON(把账号密码换成变量)
  6. 返回结果保存到登录响应
  7. 解析响应提取access_token

请求体的写法

{
    "username": ${账号变量},
    "password": ${密码变量}
}

这里容易踩坑:POST请求的Body必须是合法的JSON格式。少了一个引号、多了一个逗号都会返回400。我习惯先在Postman里调通,再把请求体原样复制到影刀里。

四、请求头(Headers):鉴权的关键

请求头告诉服务器“你是谁”。最常见的两个请求头:

请求头作用示例
Content-Type告诉服务器请求体的格式application/json

picture.image | Authorization | 身份认证 | Bearer eyJhbGciOiJIUzI1NiIs... |

实战:携带Token调用业务接口

# 请求头配置(在影刀"协议头"参数中填写,每行一个)
Content-Type: application/json
Authorization: Bearer ${access_token}

填写格式:每行一个请求头,格式为协议头名称:协议头内容

影刀操作

  1. 先用登录接口获取access_token,存到全局变量
  2. 在业务接口的“协议头”参数中填:
    Authorization: Bearer ${全局变量.access_token}
    
  3. 发送请求获取业务数据

五、Token管理:不反复登录,但不过期失效

几乎所有的开放平台API都需要Token(Access Token),Token的有效期通常是1-2小时。Token管理有两个核心原则:

  • 不要每次都重新获取(浪费时间和资源)
  • 但要确保获取到的Token是有效的(过期了要能自动刷新)

推荐方案:全局变量 + 过期检测

【流程开始】
→ 检查 全局变量.token 是否为空
→ 如果为空:调用"获取Token"子流程 → 存到全局变量
→ 如果不为空:直接使用

【每次调用API前】
→ 检查 当前时间 - 全局变量.token获取时间 > 7200秒(2小时)
→ 如果超过:重新获取Token → 更新全局变量
→ 如果没超过:直接使用

获取Token的Python代码(可直接复制到“执行Python代码”指令)

# 输入变量:app_id, app_secret
# 输出变量:token_info(字典,包含token和过期时间)

import requests

def get_token(app_id, app_secret):
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    resp = requests.post(
        url,
        json={"app_id": app_id, "app_secret": app_secret},
        timeout=30
    )
    data = resp.json()
    if data.get('code') == 0:
        return {
            'token': data['tenant_access_token'],
            'expire': data.get('expire', 7200)  # 默认7200秒
        }
    else:
        return {'error': data}

print(get_token(app_id, app_secret))

为什么用Python而不是直接在影刀里拼HTTP请求? 因为Python处理异常和重试比影刀的指令流要灵活——比如Token获取失败了,Python可以自动重试3次。

六、分页处理:一次性拿不完的数据

API接口通常不会一次返回所有数据,而是分页返回。分页处理是API采集中最常遇到的场景。

常见的分页参数

参数名含义示例
page / pageNum当前页码1, 2, 3...
pageSize / limit每页条数20, 50, 100
total总条数(从响应里获取)1234

翻页采集的完整逻辑

【初始化】
→ 设置 当前页码 = 1
→ 设置 每页条数 = 50
→ 设置 全部数据 = []

【循环采集】
→ 条件循环(True):
    → 构造URL:接口地址?page={当前页码}&size={每页条数}
    → 发送GET请求 → 响应数据
    → 解析响应 → 当前页数据列表
    
    → 如果 当前页数据列表 为空:跳出循环(没有更多数据了)
    → 追加 当前页数据 到 全部数据
    → 当前页码 = 当前页码 + 1
    
    → 【可选】如果 当前页码 > 总页数:跳出循环
    → 【可选】等待0.5秒(防止限流)

判断“是否还有下一页”的三种方式

  1. 根据返回数据是否为空:如果当前页没有数据,说明已经到最后一页了
  2. 根据总条数计算:如果当前页码 * 每页条数 >= total,说明已经采集完了
  3. 根据响应里的hasMore字段:有些接口会直接告诉你还有没有下一页

容易踩坑:有些接口的页码从0开始,有些从1开始。先发一页看看响应数据,确认清楚再写循环。

七、HTTP状态码速查(出现频率排序)

接口返回的不是200就代表出问题了:

状态码含义怎么办
200成功但!200不代表数据一定是对的,有些接口“查询无结果”也返回200
400请求参数错了检查Body的JSON格式是否正确
401没认证或Token过期了重新获取Token
403没有权限检查app有没有申请对应的权限范围
404接口地址错了检查URL里有没有拼错的路径
429请求太频繁被限流了加等待时间,降低请求频率
500服务器出问题了不是你代码的问题,等一会儿重试

我第一次调飞书API的时候,URL里少写了一个斜杠,返回404。我以为是权限问题,花了半小时查app配置,最后才发现是URL拼错了。从那以后,每次调新接口我都先用Postman测试,确认能通再写到影刀里。

八、完整实战:调用API采集商品数据并写入飞书多维表格

这是一个完整的API采集流程,包含登录获取Token、分页采集、数据清洗、写入飞书。

A_Main(主流程)
├─ 【Step 1:获取Token】
│   ├─ POST请求(登录接口) → 登录响应
│   ├─ 解析JSON提取access_token → 全局变量.token
│   └─ 记录Token获取时间 → 全局变量.token_time
│
├─ 【Step 2:分页采集数据】
│   ├─ 设置 页码 = 1
│   ├─ 设置 每页条数 = 50
│   ├─ 设置 全部数据 = []
│   │
│   ├─ 条件循环(True):
│   │   ├─ 【检查Token是否过期】
│   │   │   └─ 如果 当前时间 - token_time > 7200秒:
│   │   │       ├─ 重新获取Token
│   │   │       └─ 更新token_time
│   │   │
│   │   ├─ 【发送请求】
│   │   │   ├─ URL:https://api.example.com/products?page={页码}&size={每页条数}
│   │   │   ├─ 请求头:Authorization: Bearer ${token}
│   │   │   └─ GET请求 → 响应数据
│   │   │
│   │   ├─ 【解析响应】
│   │   │   ├─ 解析JSON → 当前页数据列表
│   │   │   ├─ 提取总条数 → total
│   │   │   └─ 如果 当前页数据列表 为空:跳出循环
│   │   │
│   │   ├─ 【数据清洗】(Python代码)
│   │   │   └─ 清洗价格、去除空格、格式化日期
│   │   │
│   │   ├─ 追加 当前页数据 到 全部数据
│   │   ├─ 页码 = 页码 + 1
│   │   └─ 等待时间(0.5秒)  # 防止限流
│   └─ 循环结束
│
├─ 【Step 3:写入飞书多维表格】
│   ├─ 连接飞书多维表格 → 多维表对象
│   └─ 批量添加记录(多维表对象, 全部数据)
│
└─ 【Step 4:发送通知】
    └─ 飞书群通知:"采集完成,共{总数}条数据"

数据清洗的Python代码(放在“执行Python代码”指令里):

# 输入:raw_data(从API返回的原始数据列表)
# 输出:clean_data(清洗后的数据列表)

import re

clean_data = []
for item in raw_data:
    # 清洗价格("¥99.00" → 99.00)
    price_raw = item.get('price', '0')
    match = re.search(r'[\d.]+', price_raw)
    price = float(match.group()) if match else 0.0
    
    # 清洗标题(去除首尾空格和换行)
    title = item.get('title', '').strip()
    
    clean_data.append({
        'title': title,
        'price': price,
        'sales': item.get('sales', 0)
    })

print(clean_data)

九、社区版用户注意

  • “HTTP请求”指令社区版也支持,不消耗运行时长
  • 调用API获取数据不占RPA时长,这部分可以大胆用
  • 只有操作网页、循环、等待这些才消耗时长
  • 建议:能用API拿数据就别用网页采集,又快又稳还不占时长

常见问题/易错速查

  1. 接口返回401 → Token过期了或没传对。检查Authorization请求头的格式是否正确(Bearer + token)。

  2. 接口返回400 → 请求体JSON格式不对。在Postman里调通了再复制到影刀里。

  3. 接口返回504超时 → 影刀HTTP请求默认超时30秒。在“连接超时秒数”参数里调大(比如60秒)。如果还不行,可能是服务器那边压力大。

  4. 分页采集只采到第一页 → 检查页码参数是否从1开始。有些接口页码从0开始。

  5. Token管理混乱 → 用全局变量存Token+获取时间,每次调用前检查是否过期。

  6. 响应内容解析失败 → 先“输出日志”打印原始响应内容,看看返回的到底是什么格式。有时候接口返回的是纯文本而不是JSON。

  7. Postman能通,影刀里不通 → 检查请求头是否完全一致。Postman会自动加一些请求头(如User-Agent),影刀不会。把Postman里的请求头全部复制过来试试。

推荐资源

  1. 影刀官方帮助中心搜索“HTTP请求”有完整指令文档
  2. Postman:调试API的神器,先把接口调通再写到影刀里
  3. 影刀开发者社区搜“HTTP请求”有大量踩坑记录
  4. 飞书/企业微信官方API文档(调用开放平台接口必看)

#影刀RPA #RPA自动化 #HTTP请求 #API调用 #数据采集 #电商自动化

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论