# Cloudflare Browser Rendering 凭据获取 `cf-browser-render` 需要两个值: | 变量 | 是什么 | 是否敏感 | |---|---|---| | `CF_BROWSER_RENDERING_TOKEN` | Cloudflare API Token | **是**,等同于密码 | | `CF_ACCOUNT_ID` | Cloudflare Account ID | 否,但建议和 Token 一起放 `.env` | --- ## 第一步:登录 Cloudflare 打开 并登录你的账号。 > Browser Rendering 的可用性、免费额度和计费方式可能随套餐变化; > 如果控制台没有该功能,先确认账号套餐或在 Dashboard 中启用。 --- ## 网络与代理要求(重要) `api.cloudflare.com` 在部分网络环境(尤其中国大陆、受限出口 IP)可能**超时、连接重置或被限制**。 即使浏览器能打开 Dashboard,脚本访问 API 仍可能需要代理 IP。 ### 在 `.env` 中配置 ```dotenv # Clash/V2Ray 等客户端的本地 HTTP 混合端口 HTTPS_PROXY=http://127.0.0.1:7890 # 可选 HTTP_PROXY=http://127.0.0.1:7890 NO_PROXY=localhost,127.0.0.1 ``` ### 或命令行指定 ```bash python skills/cf-browser-render/scripts/fetch_markdown.py \ --proxy http://127.0.0.1:7890 "https://example.com" ``` ### 注意事项 - 只支持 **HTTP/HTTPS 代理**。SOCKS5 请先在代理客户端开启本地 HTTP 混合端口 (例如 Clash 的 mixed-port),再把该端口填进 `HTTPS_PROXY`。 - 代理要能访问 `https://api.cloudflare.com`;有些代理只放行网页、不放行 API。 - 如果持续出现 **403 / 1020**,尝试更换出口 IP;Cloudflare 可能限制数据中心、 共享或被滥用的代理 IP。 - 使用可信代理。API 走 HTTPS,Token 不会明文传输,但不可信代理若安装根证书仍可能 解密流量。 - GitHub 技能用 `GITHUB_PROXY`,Cloudflare 用 `HTTPS_PROXY`,两者互不影响。 ### 测试代理是否通 bash / macOS / Linux: ```bash curl -x http://127.0.0.1:7890 -I https://api.cloudflare.com/client/v4/ ``` PowerShell: ```powershell curl.exe -x http://127.0.0.1:7890 -I https://api.cloudflare.com/client/v4/ ``` 只要不是超时/连接重置,就说明网络层已经通了;返回 200/401/403 都属于 Cloudflare 已经收到请求。再把 Token 和 Account ID 配好即可。 --- ## 第二步:找到 Account ID 两种方式任选: 1. Dashboard 首页右侧栏 → **Account ID** → 复制 2. 看浏览器地址栏:`https://dash.cloudflare.com/`,中间那段就是 Account ID Account ID 是 32 位十六进制字符串。 --- ## 第三步:创建 API Token 1. 右上角头像 → **My Profile** 2. 左侧 **API Tokens** → **Create Token** 3. 选择 **Create Custom Token**(不要用模板里权限过大的默认项) 4. 填写: - **Token name**:`llm-wiki-skills-browser-rendering` - **Permissions**: - `Account` → `Browser Rendering` → `Edit` - **Account Resources**: - `Include` → 选择你的账号 - **TTL**(可选):按需设置过期时间 5. **Continue to summary** → **Create Token** 6. **立即复制 Token**:页面只显示一次,关闭后无法再次查看 > 如果找不到 `Browser Rendering` 权限,通常是该账号尚未启用 Browser Rendering, > 或当前套餐不包含该能力;请先在 Dashboard 中确认。 --- ## 第四步:写入 `.env` 在仓库根、技能根目录或技能目录创建 `.env`: ```dotenv CF_BROWSER_RENDERING_TOKEN= CF_ACCOUNT_ID= ``` `.env` 已被 `.gitignore` 忽略。**不要把真实 Token 写进 README、脚本或提交记录。** 如果你只想给 `cf-browser-render` 一个技能使用,把 `.env` 放在: ```text ~/.claude/skills/cf-browser-render/.env # 或 ~/.dsh/skills/cf-browser-render/.env ``` --- ## 第五步:验证 ### 方式一:直接运行技能 ```bash python skills/cf-browser-render/scripts/fetch_markdown.py "https://example.com" ``` 返回 Markdown 即成功。 ### 方式二:curl 直接验证 bash / macOS / Linux: ```bash curl -sS -X POST \ "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/browser-rendering/markdown" \ -H "Authorization: Bearer $CF_BROWSER_RENDERING_TOKEN" \ -H "Content-Type: application/json" \ -d '{"url":"https://example.com"}' ``` PowerShell: ```powershell $body = @{ url = "https://example.com" } | ConvertTo-Json Invoke-RestMethod -Method Post ` -Uri "https://api.cloudflare.com/client/v4/accounts/$env:CF_ACCOUNT_ID/browser-rendering/markdown" ` -Headers @{ Authorization = "Bearer $env:CF_BROWSER_RENDERING_TOKEN" } ` -ContentType "application/json" ` -Body $body ``` 成功响应中 `"success": true`,正文在 `result` 字段。 > 如果变量只写在 `.env` 里,bash/PowerShell 不会自动加载它。 > 最省事的方式是直接用技能脚本;手动 curl 前可先 > `set -a; source .env; set +a`(bash),或在 PowerShell 中手动设置环境变量。 --- ## Token 权限说明 | 权限 | 是否必需 | 说明 | |---|---|---| | `Account > Browser Rendering > Edit` | 是 | 调用 `/browser-rendering/markdown` | | 其它 Account 权限 | 否 | 不要勾选,遵循最小权限 | | Zone 权限 | 否 | 本技能不需要 | --- ## 常见错误 | 状态 | 可能原因 | 处理 | |---|---|---| | `401` | Token 错误、过期、已被删除,或复制时少了字符 | 重新创建 Token,确认完整复制 | | `403` | Token 缺少 Browser Rendering Edit;账号未启用/套餐不支持;Account ID 不匹配;出口 IP 被限制 | 先检查权限、账号资源和 Account ID;权限无误时更换代理 IP | | `403 / 1020` | Cloudflare 判定当前出口 IP 风险较高(数据中心/共享代理等) | 更换干净的代理 IP,避免使用被滥用的公共节点 | | `429` | 配额或速率限制 | 等待后重试;降低并发;查看 Dashboard 配额 | | 请求超时 / 连接重置 | 本机无法直连 Cloudflare(国内网络常见) | 在 `.env` 设置 `HTTPS_PROXY`,或用 `--proxy`;确认代理能访问 `api.cloudflare.com` | | `success: false` | URL 不可访问、目标站点拦截、页面需要登录 | 换一个公开可访问的 URL 验证 | --- ## 安全建议 - 只创建**一个专用 Token**,不要复用其它项目的 Token - 设置过期时间,到期前轮换 - 不要把 Token 发到 Issue、聊天、截图或日志里 - 怀疑泄露:立即在 Cloudflare Dashboard 删除该 Token,重新创建 - Token 只能放在 `.env` 或系统环境变量中,**永远不要硬编码** --- ## 官方文档 - Browser Rendering 概览: - Browser Rendering REST API: - 创建 API Token: > 控制台界面、权限名称和配额可能随 Cloudflare 更新而变化;以官方文档和 Dashboard 为准。