如何格式化HTTP请求以破坏API



当这个代码工作时,它会发送"错误请求";。

import socket, ssl
token = 'NzMyMzQ1MTcwNjK2MTR5OEU3.XrzQug.BQzbrckR-THB9eRwZi3Dn08BWrM'
HOST = "discord.com"
PORT = 443
t = 'POST / HTTP/1.0rnAuthentication: Bot {token}rnHost: discord.com/api/guilds/{702627382091186318}/channelsrnrn'
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s_sock = context.wrap_socket(s, server_hostname=HOST)
s_sock.connect((HOST, 443))
s_sock.sendall(t.encode())
f = s_sock.recv(7000).decode()
print(f)
s_sock.close()

注意:这不是一个真正的令牌。

t = 'POST / HTTP/1.0rnAuthentication: Bot {token}rnHost: discord.com/api/guilds/{702627382091186318}/channelsrnrn'

这不是一个有效的HTTP请求。你基本上发送(为了清晰起见,增加了换行符(:

POST / HTTP/1.0rn
Authentication: Bot {token}rn
Host: discord.com/api/guilds/{702627382091186318}/channelsrn
rn

但是一个正确的POST请求应该是这样的:

POST /api/guilds/{702627382091186318}/channels HTTP/1.0rn
Authentication: Bot {token}rn
Host: discord.comrn
Content-length: ...
rn
<body, where size matches Content-length header>

即,您有错误的路径、错误的Host标头、缺少正文和缺少Content-length标头。如果你真的想编写自己的HTTP堆栈,而不是使用现有的库,请研究标准,而不是仅仅猜测它可能是什么样子——标准是用来做什么的。

最新更新