一个 web 能连接但 Python 不能访问的 websocket 链接,是什么原理?

2023-06-10 13:18:31 +08:00
 tg11

链接地址如下:

wss://api.cotrans.touhou.ai/task/clipekg954dosmc01ll5xpyh1/event/v1

用 web 的在线调试工具,可以连接->接收参数->断开。

用 python 代码或 postman ,加上同样的请求头,连接超时。

是哪里做了验证?

3713 次点击
所在节点    Python
37 条回复
Nazz
2023-06-10 22:12:45 +08:00
@tg11 你设置的是 http_proxy, wss 对应的是 https_proxy.
我在浏览器试过, 开启 SwitchOmega 代理能正常连接, 关闭就会超时
centralpark
2023-06-10 22:28:05 +08:00
@Nazz #21 那他这个应该就是被墙了……
Nazz
2023-06-10 22:48:46 +08:00
@centralpark 我用 golang 写的客户端已经连上去了, 输出:
{"type":"result","result":{"translation_mask":"https://cotrans-r2.moe.ci/mask/clipekg954dosmc01ll5xpyh1.png"}}

然后过几秒会发生错误断开连接
marshmallow
2023-06-10 22:55:28 +08:00
@tg11 我刚测了一下,这个 http 代理配置应该不生效。
我本机没开 clash ,走的路由器透明代理,浏览器和 python 都是直接连得上。
marshmallow
2023-06-10 23:02:05 +08:00
@Nazz haproxy 2.4+就支持啊,你 docker 运行下看看效果
tg11
2023-06-10 23:04:05 +08:00
@Nazz 断开连接是正常的,服务端主动断开的。要的就是这段 json 参数。你用 golang 写的时候挂代理了吗?
Nazz
2023-06-10 23:11:46 +08:00
@tg11 开了 clash ,然后设置 socks5://127.0.0.1:1080
est
2023-06-10 23:34:15 +08:00
这不是 py 的 ws 的锅,是 py 的 ws 不支持代理吧?
haoxue
2023-06-11 07:13:58 +08:00
可以抓包看一下,对比请求内容之间的差异,再进一步分析
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
Nazz
2023-06-11 12:14:12 +08:00
@marshmallow 知道有这个东西就行了. 我感觉 H2 升级 WebSocket 意义不大, 传输层都是 TCP, 而且 1.1 和 2 header 差异较大握手部分代码不能复用进一步导致开发者不愿意支持.
marshmallow
2023-06-12 12:36:04 +08:00
@Nazz 不能复用应该不是不愿意支持的主要原因吧。我感觉不如原来的实用才是更主要的原因。
我想用 h2 websocket ,主要原因是想用来替代 v2ray 的 mux 。平时看视频感觉很卡,不知道是不是 v2ray 的 mux 做的太差了。
Nazz
2023-06-12 13:46:48 +08:00
@marshmallow 实用性差不多, 握手之后都是 TCP Socket. HTTP/1.1 报文更简单, 而且已经得到了广泛应用.
握手的报文不变, 把传输层换成 KCP/QUIC 更有意义.
Nazz
2023-06-12 13:48:31 +08:00
@marshmallow 看视频卡可能是你的梯子延迟高. Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据, 对降低延迟没有帮助.
marshmallow
2023-06-12 20:32:31 +08:00
http2 就算没有实现 rfc8441 用起来差别也不大。如果 http3 没有实现 rfc9220 ,就感觉这个 http3 功能不完备。
marshmallow
2023-06-12 21:01:36 +08:00
延迟高和看视频关系应该不大吧,延迟只影响浏览体验,想通过代理玩游戏可能玩不了。我出现的情况是就访问视频那个流地址会 20 秒,然后超时,访问其他网站都正常,不知道具体什么原因。
v2ray 介绍里说的 Mux 功能就是为了降低延迟而设计的吧。

这两天把代理客户端用上 haproxy 了,感觉再把服务器端也配置好 haproxy 应该延迟能降不少。我现在配置的东西有点多杂,第一次访问一个网站可能要连 4 ,5 秒。
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"}}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/947518

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX