经本机 HTTP 代理访问 HTTPS 时,代理先收到 CONNECT。没有 2xx,隧道还没建立,后面的英文不是网站写的。2026-11-11 的 curl 8.5.0 里,桩代理回 403 时 curl 报隧道失败;回 200 之后才出现网站自己的状态码。

OpenAI、Anthropic 和 Google 都没有把中国大陆写成这些 API 的无条件服务地。2026-11-11 打开的 ChatGPT 支持国家 页眉是 “Updated: 20 days ago”。名单里看到 Taiwan,没有看到 China、Hong Kong、Macau。页面写明名单外访问或提供访问,账号可能被封锁或暂停。同一天的 Anthropic 支持地区政策 页眉是 Effective Nov 12, 2026。名单里同样看到 Taiwan,没有看到这三地。让 CONNECT 变成 200,只说明代理同意转发这段字节,不改变地区资格。绕过地区检查可能违反条款,账号或密钥可能被停用。本文不写伪造证件、购买或借用账号、密钥和支付卡。起草环境不是大陆宽带。

先把两次状态码分开

一个可单独引用的区分:CONNECT 的状态码是代理对「要不要建隧道」的回答;隧道建立之后的 HTTP 状态码,才是目标网站对这次请求的回答。

你留下的记录更像什么下一步
连不上 127.0.0.1 上的代理端口本机代理没在听不要记成网站拒绝
curl 打印 CONNECT tunnel failed, response 加一个非 2xx隧道没建成先看是谁回的这一行
200 Connection established 之后 TLS 失败字节已经交给代理,握手停在后面见 AI 站点的 TLS 停在哪一步
隧道 200 之后是 401,正文写缺少认证请求到了接口,身份不对不要先改出口
隧道 200 之后出现国家、地区或 territory网站按它看见的访问拒绝对照名单,停止把同一次请求反复重发

路径完全没有 HTTP 状态码时的分法,见 大陆代理连上后仍失败。401 和账单的其余差别,见 国外 AI 的 API、订阅与支付排查。那一篇的核对日是 2026-10-26,本文没有重开它的错误码页。

规范里,2xx 才切到隧道

RFC 9110 第 9.3.6 节写明:CONNECT 请求接收方建立一条到目标源站的隧道;成功之后,双方只做双向盲转发,直到隧道关闭。请求目标是主机和端口,中间一个冒号,没有默认端口。第 6.4.1 节写:对 CONNECT 的 2xx 把连接切到隧道模式,而不是带有内容。第 15.3.1 节写:对 CONNECT 而言没有内容,因为成功的结果就是隧道,它紧接在 200 响应头之后开始。

因此非 2xx 时,不能把正文当成目标网站的页面。代理可以拒绝它不愿意连接的目标。规范还写,支持 CONNECT 的代理应当把用途限制在已知端口或可配置的目标列表。本文不写如何放宽这张列表。

curl 8.5.0 当天实际打印了什么

2026-11-11 的 curl 是 8.5.0(libcurl/8.5.0,OpenSSL/3.0.13),发行说明为 Release-Date: 2023-12-06,软件包标注 security patched: 8.5.0-2ubuntu10.16。你机器上的行为以 curl --version 为准。

curl 手册 当天写:-x, --proxy 没有协议前缀或使用 http:// 时,当作 HTTP 代理。没写端口时假定为 1080。--proxytunnel 的句子是:在使用 HTTP 代理时,用 CONNECT 把流量隧道化,并要求代理允许连到 curl 想去的那个端口。手册页眉没有给出一个 curl 版本号。

下面两次都加了 --http1.1,代理端口写在命令里。没有加 --proxytunnel。

第一次,本机一个只回答 CONNECT、不会向外拨号的桩,对 CONNECT api.openai.com:443 HTTP/1.1 返回 HTTP/1.1 403 Forbidden,正文是 proxy denied。curl 的标准错误里有:

* Establish HTTP proxy tunnel to api.openai.com:443
> CONNECT api.openai.com:443 HTTP/1.1
< HTTP/1.1 403 Forbidden
* CONNECT tunnel failed, response 403
curl: (56) CONNECT tunnel failed, response 403

退出码是 56。请求没有送到 OpenAI。这行 403 不能拿去和「国家、地区或领土不支持」对照。

第二次,另一个本机桩先返回 HTTP/1.1 200 Connection established,再把字节转到 example.com:443。curl 接着打印 CONNECT tunnel established, response 200,完成 TLS,然后网站返回 HTTP/1.1 200 OK。-D - 会把 CONNECT 的响应头和网站的响应头先后打出来。先出现的 200 是隧道,后出现的 200 才是 example.com。这次没有使用 api.openai.com,不能把 example.com 的 200 当成 OpenAI 的结果。

同一天,不经代理、不带密钥,直接请求 https://api.openai.com/v1/models,约 0.15 秒得到 HTTP/2 401。JSON 的 type 为 invalid_request_error,消息为 “Missing bearer authentication in header”。响应头有 x-request-id: a7c1000c-6376-491e-97cc-4edce1b04e6b。这只证明起草环境里主机回了认证错误,也说明 401 可以出现在根本没有 CONNECT 的那一次。不要把桩代理的 403 和这次 401 合成同一次访问。

没有在真实的本地代理上重放 api.openai.com。代理软件若在连不上目标时回 502 或其他状态码,英文以你的 curl 为准,本文只记录了 403 和 200。环境变量若把主机排除在代理之外,这次可能根本不发 CONNECT,见 官方 SDK 怎么走代理。

200 之后才轮到地区句

隧道已经 200,后面的 HTTP 状态码才进入网站自己的错误表。2026-11-11 没有重开 OpenAI 的错误码页,也没有做出「国家不支持」的 403。已有的分法见 网页能开,不代表 API 同一出口 和 API、订阅与支付排查。流式响应在 200 之后仍可能断开,见 流式返回 200 之后,连接仍会断。那是隧道建成之后的另一件事。

iPhone 上请求根本没进隧道时,不会出现这次 CONNECT,见同日草稿 全部网络没打开时,AI 请求会直连。Linux 上名字仍问本地解析器,见同日草稿 路由域没盖住时,AI 域名问本地。这两篇仍是草稿,链接要等发布后才有效。

公开文件里的法律范围

工信部信管函〔2017〕32 号 于 2017-01-22 发布。其中写明:未经电信主管部门批准,不得自行建立或租用专线(含虚拟专用网络 VPN)等其他信道开展跨境经营活动。

2017-01-24 的答记者问 说明,规范的是没有国际通信业务经营资质、私自开展跨境电信业务经营的企业或个人。企业因办公自用,向依法设置国际通信出入口局的经营者租用,不在答记者问所说的影响范围内。本文不判断某种个人使用是否违法,也不写规避执法的做法。2026-11-11 没有重新打开部委网页。

一次失败留下的记录

记下四样东西:curl 版本、代理地址是不是本机端口、CONNECT 那一行的状态码、隧道 200 之后的 HTTP 状态码和 x-request-id(如果有)。只有第一行、没有第二行时,停止改账号和出口。两行都有、第二行仍是国家或地区不支持时,停止改 CONNECT,按对方的名单处理。