python - 成功http请求(响应101)后切换到websocket连接的确切方法?
问题描述
我正在尝试使用 python 连接到 WebSocket,但对使 websocket 连接工作的确切转换过程感到困惑。
到目前为止,我已经成功地使用 requests 包发出了 http“升级”请求,并得到了服务器的 101 响应。
代码看起来像这样
import requests
cookies = {
'lang': 'en',
'_ga': 'GA1.2.2001593629.1610867666',
'_gid': 'GA1.2.1826988459.1610867666',
'_gat_UA-171812727-1': '1',
'_ym_uid': '1610867667240953916',
'_ym_d': '1610867667',
'_ym_visorc_65463124': 'w',
'_ym_isad': '2',
'_gat_UA-171812727-2': '1',
}
headers = {
'Host': 'ws.website.com',
'Connection': 'Upgrade',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
'Upgrade': 'websocket',
'Origin': 'https://website.com',
'Sec-WebSocket-Version': '13',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
'Sec-WebSocket-Key': 'FMZPo/xOQ3NdTAIkH2hJaw==',
}
response = requests.get('https://ws.website.com/socket.io/?EIO=3&transport=websocket', headers=headers, cookies=cookies, verify=False)
print(response.status_code) # prints 101
令人困惑的一点是,当我在 WS 下检查 Chrome 的网络选项卡时,我看到标头中的请求 URL 是 wss://ws.website.com/socket.io/?EIO=3&transport=websocket。当尝试在 request.get() 中使用 wss 方案时,我得到 400 响应。
那么我应该在发出升级请求并使用请求包时使用http方案还是我必须使用像websocket这样的另一个包并以wss://开头的请求?
在我提供的部分代码之后,是否有正确的方法来进行 websocket 连接?
非常感谢您的帮助。
问候,
解决方案
推荐阅读
- r - 如何对矩阵的所有列执行计算?
- react-native - 当我按下按钮时没有调用方法
- python-3.x - Kivy 小部件的不透明度不会在视觉上更新
- swift - 如何从匹配的字典值中返回一个字符串?
- python - 从值之间而不是在用户列表中的 sql 表中选择元素
- facebook - 如何从网站向特定的 Facebook 用户发送消息?
- json - axios请求从Vue中的嵌套数组中获取值
- c++ - c++ libcurl使用github库发送smtp邮件失败
- java - 在 WAS 9 上使用 Apache HttpClient 和 IBM Jsse2 的 SSLHandshakeException
- python - 使用 elementtree 对嵌套元素进行排序