使用Python和websocketclient库发送一个安全(SSL)web套接字请求,并希望更好地了解发生了什么

2024-05-18 05:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Python和websocket客户机库构建并发送websocket请求,但是我想理解为什么在尝试URL和header值的不同变体时,我总是得到400或502代码,或者连接超时。在

首先,我对websocket请求有点陌生,在诊断常规的旧HTTP请求方面我不是一个专家。在

幸运的是,有可用的调试信息,允许我以纯文本形式查看请求。在

老实说,在这一点上,我几乎是在一个板上随机扔飞镖,调整websocketurl和头值,但我真的很想知道如何系统地处理这个问题。在

对于更广泛的上下文,这里是我正在尝试修改的github repo(基本上,我试图抽象出代码的最基本部分,以理解它是如何工作的,并使最简单的版本能够正常工作,而不需要任何花言巧语)。在

https://github.com/odsum/TinyChatBot

这是一个发送到general/generic tinychat URL的示例请求(使用标准SLL端口443)

cookies: <RequestsCookieJar[<Cookie hash=79d26a617642869dcbf218289211945c for .tinychat.com/>, <Cookie pass=925c6a6f825421f84bd0e68e4fdd404b for .tinychat.com/>, <Cookie tcuid=rB8UtFxM4FGx2ka1BMmrAg== for .tinychat.com/>, <Cookie user=cooldudeusername for .tinychat.com/>, <Cookie XSRF-TOKEN=eyJpdiI6ImhUeU1cL3NXMzJVQXRsTVh6a1NkdGFBPT0iLCJ2YWx1ZSI6IndiN1ZYbEJQOTZHYXpjUVFcL25SU1BPcTV6Y2tKbVRUYTV1NHJ5cWxXeXNRMGIwNnl0WDNEeU9wZXUrdEdTTWkwd0xNK09VcFhDRnpsd3dXTE1JY0l1UT09IiwibWFjIjoiYjdlZmIxNWNhNTJkYzczOTYzYTk2Nzg5MjQyODhhZGE2NTIxZDQ5Nzk3NWRhOTg5NGExNDkwM2JiYjk2NjFkNyJ9 for tinychat.com/>, <Cookie remember_82e5d2c56bdd0811318f0cf078b78bfc=eyJpdiI6Ik1rbzIxWGRDdTBrN1huMFp1RzZleXc9PSIsInZhbHVlIjoibHI3NTROcFc4V3pYSk90K2RValZwdjRvSml2K1wvdVhNSHd5SDZKWFdZaEZ6Qk4wVHFTa1EybzIySXQ4RzN0R3R5VTJqMGR2QlUySkVxWG9sWmNBUTdreTF0NTdVV0hcLzdTa1dIbHVsQVU5d1wvYVhmZFRhRTkzaXFqaFBzaWFET04iLCJtYWMiOiJlNmUzOTYzNjA0YWU5YTEzOTlkZTdhZTc2NjhlYzQ2OWQ5MGJhZWI2OGQ4MTUzNjNiNjQwYTEyZmQ3MmY1NTkxIn0%3D for tinychat.com/>, <Cookie sm_dapi_session=1 for tinychat.com/>, <Cookie tcsession=3de8c7d90f323fcc4753d764722d6582649f34f6 for tinychat.com/>]>

--- request header ---
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: wss.tinychat.com:443
Origin: https://tinychat.com
Sec-WebSocket-Key: XlfPqPAzStqTbVg2Y4lxBQ==
Sec-WebSocket-Version: 13
User-Agent
Connection
Cache-Control
Accept
Accept-Language
Accept-Encoding
Sec-WebSocket-Protocol
Sec-WebSocket-Extensions

-----------------------
--- response header ---
HTTP/1.1 502 Bad Gateway
Server: awselb/2.0
Date: Sat, 26 Jan 2019 22:33:54 GMT
Content-Type: text/html
Content-Length: 138
Connection: keep-alive
-----------------------

下一个示例使用动态生成的WSS URL,该URL具有唯一的子域和端口(在前面的代码中获取)

^{pr2}$

我尝试过其他变体,但是在这里粘贴代码来显示每个场景是没有意义的,因为可能有无限多的可能性。在

当涉及到调整标题时(无论是添加其他标题,删除其中的一些标题,还是更改已在混合中的标题的值),我只是不知道如何在这方面做出明智的决定。在

(顺便说一句,这是我第一篇关于堆栈溢出的文章。。。有点刺激,不会说谎)。在


Tags: 代码comhttpurl标题forcookie变体
1条回答
网友
1楼 · 发布于 2024-05-18 05:37:57

好吧,我开始工作了。在

事实证明,这些头值中的大多数不仅完全没有必要,而且有些甚至可能是错误的、不准确的或不正确的。在

而且,饼干也是完全没有必要的。在

对于任何可能遇到这一点的人,我们将简单介绍一下饼干最基本的本质:

Cookie可以,而且显然经常是这样,它只包含在会话开始时动态生成的单个令牌字符串,但必须随每个后续请求一起发送。在

因此,令牌可以保存在内存中的一个简单变量中,而不是显式地使用请求库的cookie。在

这里有更多关于cookies的好信息:https://www.sohamkamani.com/blog/2017/01/08/web-security-session-cookies/

相关问题 更多 >