Repository navigation
Replies: 1 comment
|
补一条版本证据:这个 bug 在当前 release 上仍然复现( 环境:Windows 桌面版 0.2.0-rc.2、httpx 0.28.1、CPython 3.13.15。 复现(构造期即抛,与目标服务无关): $ python -c "import os,httpx;print([v for k,v in os.environ.items() if k.lower()=='no_proxy']);httpx.AsyncClient()"
['localhost,127.0.0.1,::1,<模型端点>,...,[::1]']
Traceback (most recent call last):
File "httpx/_client.py", line 1413, in __init__
URLPattern(key): None
File "httpx/_utils.py", line 172, in __init__
url = URL(pattern)
File "httpx/_urlparse.py", line 411, in normalize_port
httpx.InvalidURL: Invalid port: ':1]'三点可与 #6098 互证(在另一台机器、另一个 SDK 上撞到):
修法上有一点值得强调(#6098 里 argszero 已论证,我复核了常量与导出路径,未重跑他那张 Node undici 版本矩阵):方括号不能直接删。Node 自带的 undici(Node 26.5.0 内为 8.7.0)只会按 工具侧目前只能各自绕行(本进程内丢掉含方括号的条目,或 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
摘要
@deepseek-ai/dsh-http-proxy把 undici 专用的方括号写法[::1]混进了标准NO_PROXY/no_proxy环境变量。该变量会被applyPolicyEnv()写进process.env,因此每个被 spawn 的子进程都会继承。非 Node 的 HTTP 客户端(Pythonhttpx/requests)无法解析[::1],只要构造 HTTP client 就抛异常。DSH 加入
[::1]是为了修 undici 自身的解析缺陷,但把该缺陷转嫁给了其它语言的客户端。环境
2.0.15-next)127.0.0.1:7897问题代码
packages/util/http-proxy/src/policy.ts:33注释(同文件 L28-32)说明了
[::1]的动机:传播路径:
policy.tswithLoopback()(L200 附近)把LOOPBACK_NO_PROXY并进 policy 的noProxyinstall.tsapplyPolicyEnv()(打包版lib/index.js:334)调用writeProxyEnv(),逐名写入process.env观测到的值
逐段对应:
100.122.107.27,192.168.10.32,198.18.0.1.locallocalhost,127.0.0.1,::1,[::1]LOOPBACK_NO_PROXY大小写成对出现(
http_proxy+HTTP_PROXY等)也符合POLICY_ENV_NAMES的"both casings are always written or cleared together"。触发条件(
buildDesktopProxyOverlay):未显式导出 proxy,且系统代理探测返回非 DIRECT。因此与启动方式无关(Finder / 终端 / 任何 shell 都一样),因为系统代理是机器级设置。复现
最小复现(Python + httpx)
在子进程里分别设置
NO_PROXY后的实测结果:即:只有带方括号的那一项失败;裸
::1与空值都正常。真实测试套件(uv + pytest)
一个 1669 用例的单元测试套件,用继承 DSH 环境的 shell 运行:
清掉方括号后,同一批文件:
受影响文件的失败点全部是构造 HTTP client,与代理连通性无关——
httpx.Client()在解析环境变量阶段就抛异常,请求根本没发出。影响
Invalid port: ':1]')完全不指向根因requests(同源 urllib 语义)、可能影响其它按host:port解析 bypass 项的非 Node 客户端[::1]说明
All reactions