python - 一个 HTTP GET 请求返回 302,但位置标头与我最初传递的相同
问题描述
我从不知道如何修复的服务器收到意外响应。我一直在修改 Discord 网关,它使用安全的 websocket 连接。但是,当我请求建立与网关的连接时,我得到了302 Found
响应状态。经过一番谷歌搜索,我发现我应该使用Location
标题中指定的 URI;但是,这与我最初通过的(几乎)相同。
import socket
import ssl
ctx = ssl.create_default_context()
ssl_sock = ctx.wrap_socket(socket.socket(), server_hostname='discord.com')
ssl_sock.connect(('discord.com', 443))
ssl_sock.sendall(b'''GET /wss://gateway.discord.gg/?v=6&encoding=json HTTP/1.1\r
Host: discord.com\r
Authorization: Bot uhfu734\r
User-Agent: Disc ($https://hi.com, $2)\r
Upgrade: websocket\r
Connection: Upgrade\r
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r
Origin: https://discord.com/\r
Sec-WebSocket-Protocol: chat, superchat\r
Sec-WebSocket-Version: 13\r\n\r
''')
print(ssl_sock.recv(10000))
这是回应:
b'HTTP/1.1 302 Found\r\nDate: Wed, 02 Sep 2020 01:21:26 GMT\r\nContent-Type: text/plain;charset=UTF-8\r\nContent-Length: 0\r\nConnection: keep-alive\r\nSet-Cookie: __cfduid=d6941593b4b04a8b370e7a4c7799155d81599009686; expires=Fri, 02-Oct-20 01:21:26 GMT; path=/; domain=.discord.com; HttpOnly; SameSite=Lax; Secure\r\nLocation: https://discord.com/wss:/gateway.discord.gg?v=6&encoding=json\r\nStrict-Transport-Security: max-age=31536000; includeSubDomains; preload\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: DENY\r\nX-Robots-Tag: noindex, nofollow, noarchive, nocache, noimageindex, noodp\r\nX-XSS-Protection: 1; mode=block\r\ncf-request-id: 04ee009aad0000cf1c8304e200000001\r\nExpect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"\r\nServer: cloudflare\r\nCF-RAY: 5cc36a0aab6dcf1c-IAD\r\n\r\n'
位置标头的唯一区别是 ./
之前的右侧?
,但是当我省略它时,我收到一个401 OK
. 如您所见,Location
标头与我最初使用的 URI 几乎相同,所以我不知道从这里还能做什么。
有关 Discord API 的特定信息,您可以在此处阅读:https ://discord.com/developers/docs/topics/gateway 。我已经阅读了它,但我可能误解了某些内容。
请不要把我引向websockets
图书馆的方向,我知道它非常适合这个目的,但我的目标是理解 websockets 的一些底层概念,为此,我更喜欢用较少抽象的方式与它们进行交互。
提前致谢!
解决方案
GET /wss://gateway.discord.gg/?v=6&encoding=json HTTP/1.1
这可能不是一个有效的请求。看起来你正在以一种奇怪的方式混合协议、方法和路径。应该是:
GET /?v=6&encoding=json HTTP/1.1
您的奇怪请求可能是导致这种奇怪响应的原因。
推荐阅读
- javascript - HTML 表格 - 使用 SSRS、Java 和 JavaScript 导出 Excel
- php - Laravel 错误:htmlspecialchars() 期望参数 1 是字符串,给定数组 (0)
- javascript - HTML 画布和 SVG 之间是否有任何兼容性,或者它们是完全独立的野兽?
- javascript - 使用 JavaScript createElement() 方法在 keydown 上创建的元素不适用于 jQuery draggable() 方法
- javascript - 偶数 javascript 浏览数组
- swift - 您可以在 AR 中流式传输视频而不使用 ARKit 将其保存到设备吗
- linux - 使用 puppet agent 命令更改主机组
- r - 将多列转换为因子并赋予它们数值
- postgresql - 如何在 Hasura 中创建数组关系?
- json - 在 .Net 中的循环内创建 JSON