吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 45|回复: 0
上一主题 下一主题
收起左侧

[经验求助] 关于飞书API 21001报错问题

[复制链接]
跳转到指定楼层
楼主
kaijie117 发表于 2026-10-17 13:02 回帖奖励
50吾爱币
我在请求飞书多维表格的API的时候
出现 21001报错

21001 — Access denied by access control policy. Contact the administrator for assistance. 没有设置白名单,

源码:
[Python] 纯文本查看 复制代码
import json
import urllib.request

# 在这里填写飞书应用与多维表格信息
APP_ID = ""
APP_SECRET = ""
APP_TOKEN = ""
TABLE_ID = ""

SPU_VALUE = "Y201"
PRODUCT_URL = "https://detail.1688.com/offer/XXXXXXX.html?"

API_BASE = "https://open.feishu.cn/open-apis"


def request(method, path, token, body=None):
    data = None if body is None else json.dumps(body, ensure_ascii=False).encode("utf-8")
    request_obj = urllib.request.Request(
        API_BASE + path,
        data=data,
        method=method,
        headers={
            "Authorization": f"Bearer {token}",
            "Content-Type": "application/json; charset=utf-8",
        },
    )
    with urllib.request.urlopen(request_obj) as response:
        result = json.loads(response.read().decode("utf-8"))
    if result["code"] != 0:
        raise RuntimeError(f"飞书接口调用失败:{result['code']} {result['msg']}")
    return result["data"]


def get_tenant_access_token():
    body = json.dumps({
        "app_id": APP_ID,
        "app_secret": APP_SECRET,
    }, ensure_ascii=False).encode("utf-8")
    request_obj = urllib.request.Request(
        "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
        data=body,
        method="POST",
        headers={"Content-Type": "application/json; charset=utf-8"},
    )
    with urllib.request.urlopen(request_obj) as response:
        result = json.loads(response.read().decode("utf-8"))
    if result["code"] != 0:
        raise RuntimeError(f"获取 tenant_access_token 失败:{result['code']} {result['msg']}")
    return result["tenant_access_token"]


def main():
    token = get_tenant_access_token()
    table_path = f"/bitable/v1/apps/{APP_TOKEN}/tables/{TABLE_ID}"
    fields_path = f"{table_path}/fields?page_size=100"

    fields_data = request("GET", fields_path, token)
    fields = fields_data["items"]
    primary_field = next(field for field in fields if field["is_primary"])

    if primary_field["field_name"] != "SPU" or primary_field["type"] != 1:
        request(
            "PUT",
            f"{table_path}/fields/{primary_field['field_id']}",
            token,
            {"field_name": "SPU", "type": 1},
        )

    url_field = next((field for field in fields if field["field_name"] == "1688链接"), None)
    if url_field is None:
        url_field = request(
            "POST",
            f"{table_path}/fields",
            token,
            {"field_name": "1688链接", "type": 15, "ui_type": "Url"},
        )["field"]

    record = request(
        "POST",
        f"{table_path}/records",
        token,
        {
            "fields": {
                "SPU": SPU_VALUE,
                "1688链接": {
                    "text": PRODUCT_URL,
                    "link": PRODUCT_URL,
                },
            }
        },
    )
    print(f"已写入记录:{record['record']['record_id']}")


if __name__ == "__main__":
    main()


来个大佬帮忙看一下

发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-10-18 05:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表