影刀RPA API接口对接详解:GET POST Headers认证完全实战

作者:林焱


什么叫 API 接口

你在用影刀抓网页数据时,其实有时候有更好的路:直接调用网站的 API 接口,拿到结构化的 JSON 数据,不用解析 HTML,不用处理元素定位,也不会因为网页改版而失效。

API(Application Programming Interface)就是一个服务提供给外部调用的标准接口。比如:
在这里插入图片描述

  • 天气服务提供 API,你传城市名,它返回天气数据
  • 企业微信提供 API,你传消息内容,它帮你发给群组
  • 你的公司内部系统,也可能提供 API 给 RPA 流程调用

影刀的 HTTP 请求指令

影刀在"网络请求"分类下提供以下指令:

  • HTTP GET请求 — 获取数据(查询类)
  • HTTP POST请求 — 提交数据(提交类)
  • HTTP PUT请求 — 更新数据
  • HTTP DELETE请求 — 删除数据
  • HTTP请求(通用)— 可以指定任意 Method

基础操作:发一个 GET 请求

最简单的例子

在这里插入图片描述

HTTP GET请求(
    URL: "https://api.example.com/products?category=electronics&page=1"
)
→ 返回值: 响应结果

响应结果 包含:

  • 响应结果.状态码 — 200 表示成功
  • 响应结果.响应体 — 返回的 JSON 字符串
  • 响应结果.响应头 — 响应头信息

解析 JSON 响应

拼多多店群自动化报活动上架!

If 响应结果.状态码 == 200:
    数据 = JSON解析(响应结果.响应体)
    商品列表 = 数据.products
    For 商品 in 商品列表:
        打印日志(商品.name + " - " + 商品.price)
Else:
    打印日志("请求失败,状态码:" + 响应结果.状态码)

在这里插入图片描述

POST 请求:提交 JSON 数据

提交 JSON 格式请求体

HTTP POST请求(
    URL: "https://api.example.com/orders",
    请求头: {
        "Content-Type": "application/json",
        "Accept": "application/json"
    },
    请求体: JSON格式化({
        "product_id": "P001",
        "quantity": 2,
        "customer_id": "C12345"
    })
)
→ 返回值: 响应结果

提交表单格式(application/x-www-form-urlencoded)

HTTP POST请求(
    URL: "https://api.example.com/login",
    请求头: {"Content-Type": "application/x-www-form-urlencoded"},
    请求体: "username=linyan&password=your_password"
)

认证方式大全

在这里插入图片描述

API 接口通常有认证要求,常见的几种:

方式1:API Key(最常见)

很多公共 API 用这种方式,在请求头里带上 Key:

HTTP GET请求(
    URL: "https://api.openweathermap.org/data/2.5/weather?q=Beijing",
    请求头: {
        "X-API-Key": "your_api_key_here"
    }
)

或者在 URL 里带:

URL: "https://api.openweather.com/weather?q=Beijing&appid=your_api_key"

方式2:Bearer Token(OAuth 2.0)

在这里插入图片描述

大多数企业级 API 和 SaaS 平台用这个:

HTTP GET请求(
    URL: "https://api.github.com/user/repos",
    请求头: {
        "Authorization": "Bearer ghp_your_token_here",
        "Accept": "application/vnd.github.v3+json"
    }
)

方式3:Basic Auth(用户名+密码)

// 先把 "用户名:密码" 做 Base64 编码
凭证 = Base64编码("linyan:password123")

HTTP GET请求(
    URL: "https://api.example.com/data",
    请求头: {
        "Authorization": "Basic " + 凭证
    }
)

方式4:先登录获取 Token,再用 Token 请求

很多内部系统是这种双步认证:

// 第1步:登录获取 Token
登录响应 = HTTP POST请求(
    URL: "https://api.internal.com/auth/login",
    请求头: {"Content-Type": "application/json"},
    请求体: JSON格式化({
        "username": "linyan",
        "password": "密码"
    })
)

登录数据 = JSON解析(登录响应.响应体)
访问Token = 登录数据.access_token
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/72d706889fd84b919dcf8713b04975de.png#pic_center)

Token过期时间 = 登录数据.expires_in

// 第2步:用 Token 请求数据
数据响应 = HTTP GET请求(
    URL: "https://api.internal.com/reports/today",
    请求头: {
        "Authorization": "Bearer " + 访问Token
    }
)

分页处理:批量拉取所有数据

很多 API 有分页,一次返回 20 或 100 条,需要循环请求:

当前页 = 1
全部数据 = []
有更多数据 = True

While 有更多数据:
    响应 = HTTP GET请求(
        URL: "https://api.example.com/products?page=" + 当前页 + "&per_page=100",
        请求头: {"Authorization": "Bearer " + Token}
    )
    
    If 响应.状态码 != 200:
        打印日志("请求失败:页码 " + 当前页)
        Break
    
    数据 = JSON解析(响应.响应体)
    列表合并(全部数据, 数据.items)
    
    // 判断是否还有下一页
    If 数据.has_next == false OR 列表长度(数据.items) == 0:
        有更多数据 = False
    Else:
        当前页 = 当前页 + 1
        等待(500)  // 避免请求太快被限速

打印日志("共获取 " + 列表长度(全部数据) + " 条数据")

实战:对接企业微信机器人 API

场景

用影刀调用企业微信群机器人 API,自动推送每日数据报告。

在这里插入图片描述

// 企业微信机器人 Webhook URL(在群机器人设置里获取)
webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key"

// 构造消息内容
消息内容 = {
    "msgtype": "markdown",
    "markdown": {
        "content": "### 📊 每日数据报告\n" +
                   "> 日期:" + 今日日期 + "\n" +
                   "> 总销售额:**¥" + 今日销售额 + "**\n" +
                   "> 订单数:**" + 今日订单数 + "**\n" +
                   "> 环比:" + 环比变化
    }
}

// 发送 POST 请求
响应 = HTTP POST请求(
    URL: webhook_url,
    请求头: {"Content-Type": "application/json"},
    请求体: JSON格式化(消息内容)
)

If JSON解析(响应.响应体).errcode == 0:
    打印日志("推送成功")
Else:
    打印日志("推送失败:" + 响应.响应体)

踩坑记录

坑1:SSL 证书验证失败

TEMU店群矩阵自动化运营核价报活动

访问内部系统时,服务器用的是自签名证书,影刀会报"SSL证书验证失败"。

解决方法:在 HTTP 请求设置里关闭 SSL 验证(仅限内部可信系统,外部接口不要关)。

在这里插入图片描述

坑2:被限速(Rate Limit)

连续请求太快,API 返回 429 Too Many Requests。

解决方法:

  • 在循环里加 等待(500)等待(2000)
  • 处理 429 响应时,读取响应头的 Retry-After 字段,等待指定时间再重试

坑3:Token 过期没有处理

流程运行中途 Token 过期,API 返回 401 Unauthorized,流程直接报错停止。

解决方法:
在这里插入图片描述

If 响应.状态码 == 401:
    // Token 过期,重新登录获取
    访问Token = 重新登录()
    // 用新 Token 重试这次请求
    响应 = HTTP GET请求(URL, 带新Token的请求头)

坑4:JSON 序列化中文问题

用影刀的 JSON 格式化指令序列化中文内容,有时中文变成 Unicode 转义(\u4e2d\u6587),API 服务器接收后显示乱码。

解决方法:用 Python 脚本做 JSON 序列化:

import json
data = json.loads("{data}")
result = json.dumps(data, ensure_ascii=False)
print(result)

小结

API 接口调用在影刀里的核心步骤:
在这里插入图片描述

  1. 确认认证方式(API Key / Bearer Token / Basic Auth)
  2. 构造请求头和请求体
  3. 发送请求,检查状态码
  4. 解析 JSON 响应体,提取需要的字段
  5. 处理分页(如果有的话)
  6. 处理常见错误(401/429/500)

掌握这个之后,基本上只要有 API 文档,就能对接任何系统。


作者:林焱|飞行社 RPA 实践记录

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐