链接地址如下:
wss://api.cotrans.touhou.ai/task/clipekg954dosmc01ll5xpyh1/event/v1
用 web 的在线调试工具,可以连接->接收参数->断开。
用 python 代码或 postman ,加上同样的请求头,连接超时。
是哪里做了验证?
1
so1n 2023-06-10 14:29:49 +08:00
你是不是用了 socketio
|
3
Nazz 2023-06-10 15:57:57 +08:00 via Android
可能是 header 差异造成的,服务端有 check origin
|
5
momocraft 2023-06-10 16:24:01 +08:00
2 个不好判断 完全有可能是 py 代码写错了
试试别的 cliient? |
6
Nazz 2023-06-10 16:26:04 +08:00 via Android
连接超时是因为没使用代理
|
9
marshmallow 2023-06-10 16:34:19 +08:00
python 用了 http2 ,而浏览器降级到 http/1.1 了吧?
|
10
marshmallow 2023-06-10 16:38:44 +08:00
你看一下浏览器请求头,如果有 Connection: upgrade 和 Upgrade: websocket ,那就是用 http1.1 握手的。http2 版的 websocket 我还没有测过,只是我确定没有 Connection 和 Upgrade 头。
|
11
Nazz 2023-06-10 17:18:55 +08:00 via Android
@tg11 开了 clash 不意味着 websocket 能通过代理建立连接,关掉 clash 你会发现浏览器里面也会超时
|
12
Nazz 2023-06-10 17:24:40 +08:00 via Android
@marshmallow 好好看看 rfc6455 吧
|
14
tg11 OP @Nazz 我直接用的
websocket.enableTrace(True) ws = websocket.WebSocket( http_proxy_host="127.0.0.1", http_proxy_port=7890) ws.connect('wss://api.cotrans.touhou.ai/task/clipekg954dosmc01ll5xpyh1/event/v1') 所以肯定是走了代理的 |
15
tg11 OP @marshmallow python 的 websocket-client 是基于 http1.1 握手的。请求头确实有 Connection: upgrade 和 Upgrade: websocket 。
我在连接 ws 的时候手动添加这两个 header 也不管用。 对了,我在主楼留的链接,是可以直接访问的,你可以试试 |
17
centralpark 2023-06-10 20:51:51 +08:00 1
可能是 tls 指纹
|
18
tg11 OP @centralpark 随便手撸一个 js 的 websocket 客户端,就不受 tls 指纹影响吗?
|
19
marshmallow 2023-06-10 21:46:21 +08:00
@Nazz 你好好看看 rfc8441 ,再来回复我吧
|
20
Nazz 2023-06-10 21:56:42 +08:00 via Android
@marshmallow 是我孤陋寡闻了,没见过 RFC8441 的 server 实现
|
21
Nazz 2023-06-10 22:12:45 +08:00
@tg11 你设置的是 http_proxy, wss 对应的是 https_proxy.
我在浏览器试过, 开启 SwitchOmega 代理能正常连接, 关闭就会超时 |
22
centralpark 2023-06-10 22:28:05 +08:00
@Nazz #21 那他这个应该就是被墙了……
|
23
Nazz 2023-06-10 22:48:46 +08:00
@centralpark 我用 golang 写的客户端已经连上去了, 输出:
{"type":"result","result":{"translation_mask":"https://cotrans-r2.moe.ci/mask/clipekg954dosmc01ll5xpyh1.png"}} 然后过几秒会发生错误断开连接 |
24
marshmallow 2023-06-10 22:55:28 +08:00
@tg11 我刚测了一下,这个 http 代理配置应该不生效。
我本机没开 clash ,走的路由器透明代理,浏览器和 python 都是直接连得上。 |
25
marshmallow 2023-06-10 23:02:05 +08:00 1
@Nazz haproxy 2.4+就支持啊,你 docker 运行下看看效果
|
28
est 2023-06-10 23:34:15 +08:00
这不是 py 的 ws 的锅,是 py 的 ws 不支持代理吧?
|
29
haoxue 2023-06-11 07:13:58 +08:00 via Android
可以抓包看一下,对比请求内容之间的差异,再进一步分析
|
30
FaiChou 2023-06-11 10:17:43 +08:00
用 Proxyman 抓包看看,设置代理为 Proxyman 的,Proxyman 上级代理是 clash, 或者直接用 ClashX Pro 增强模式。
websocket.WebSocket( http_proxy_host="127.0.0.1", http_proxy_port=PROXYMANPORT) https://docs.proxyman.io/advanced-features/websocket |
31
Nazz 2023-06-11 12:14:12 +08:00
@marshmallow 知道有这个东西就行了. 我感觉 H2 升级 WebSocket 意义不大, 传输层都是 TCP, 而且 1.1 和 2 header 差异较大握手部分代码不能复用进一步导致开发者不愿意支持.
|
32
marshmallow 2023-06-12 12:36:04 +08:00
@Nazz 不能复用应该不是不愿意支持的主要原因吧。我感觉不如原来的实用才是更主要的原因。
我想用 h2 websocket ,主要原因是想用来替代 v2ray 的 mux 。平时看视频感觉很卡,不知道是不是 v2ray 的 mux 做的太差了。 |
33
Nazz 2023-06-12 13:46:48 +08:00
@marshmallow 实用性差不多, 握手之后都是 TCP Socket. HTTP/1.1 报文更简单, 而且已经得到了广泛应用.
握手的报文不变, 把传输层换成 KCP/QUIC 更有意义. |
34
Nazz 2023-06-12 13:48:31 +08:00
@marshmallow 看视频卡可能是你的梯子延迟高. Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据, 对降低延迟没有帮助.
|
35
marshmallow 2023-06-12 20:32:31 +08:00
http2 就算没有实现 rfc8441 用起来差别也不大。如果 http3 没有实现 rfc9220 ,就感觉这个 http3 功能不完备。
|
36
marshmallow 2023-06-12 21:01:36 +08:00
延迟高和看视频关系应该不大吧,延迟只影响浏览体验,想通过代理玩游戏可能玩不了。我出现的情况是就访问视频那个流地址会 20 秒,然后超时,访问其他网站都正常,不知道具体什么原因。
v2ray 介绍里说的 Mux 功能就是为了降低延迟而设计的吧。 这两天把代理客户端用上 haproxy 了,感觉再把服务器端也配置好 haproxy 应该延迟能降不少。我现在配置的东西有点多杂,第一次访问一个网站可能要连 4 ,5 秒。 |
37
wingor2015 2023-06-15 17:49:57 +08:00
网上超了一段,
from websocket import create_connection ws = create_connection("wss://api.cotrans.touhou.ai/task/clipekg954dosmc01ll5xpyh1/event/v1", timeout=5) if ws.connected: ws.send('8') print(ws.recv()) # ws.close() 打印了这个{"type":"result","result":{"translation_mask":"https://cotrans-r2.moe.ci/mask/clipekg954dosmc01ll5xpyh1.png"}} |