You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Notion非公开API获取公开数据时遇CORS错误求助

问题解答

为啥Postman能成功,前端代码却报CORS错?

  • Postman、Thunder Client这类工具是独立的HTTP客户端,不在浏览器环境运行,完全不受浏览器的同源策略限制,所以能直接调用Notion的接口。
  • 你的前端代码运行在浏览器里,浏览器会自动执行CORS校验,而Notion这个非官方API并没有配置允许你当前域名的跨域权限,因此会被拦截报错。

当然能通过编程实现,给你两个可行方案:

方案1:搭建后端代理(首推)

自己写一个后端接口,由后端去调用Notion的loadPageChunk端点,前端再请求自己的后端接口。后端请求不受浏览器同源策略约束,能完美绕过CORS问题。

给你一个Node.js(Express)的极简示例:

const express = require('express');
const axios = require('axios');
const app = express();

app.use(express.json());

// 自定义代理接口
app.post('/fetch-notion-page', async (req, res) => {
  try {
    // 后端发起对Notion接口的请求
    const response = await axios.post('https://www.notion.so/api/v3/loadPageChunk', req.body, {
      headers: {
        // 模拟浏览器请求头,避免被Notion反爬机制拦截
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/118.0.0.0 Safari/537.36'
      }
    });
    res.send(response.data);
  } catch (error) {
    res.status(error.response?.status || 500).send(error.response?.data || '请求失败');
  }
});

app.listen(3000, () => console.log('代理服务运行在3000端口'));

前端只需向http://localhost:3000/fetch-notion-page发起请求,传递原来的请求体即可。

方案2:用浏览器扩展临时绕过CORS(仅限开发测试)

如果只是本地开发测试,可以安装CORS解锁类的浏览器扩展(比如CORS Unblock),临时关闭浏览器的CORS检查。但这种方法仅适用于开发场景,绝对不能用于生产环境的正式应用。

注意事项

  • Notion的非官方API没有公开文档,接口规则随时可能变更,甚至会被封禁,使用时需自行承担风险。
  • 调用时尽量模拟真实浏览器的请求头(比如User-Agent、Cookie等),避免被Notion的反爬机制拦截。

内容的提问来源于stack exchange,提问作者yuvraj singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:17:45