【发布时间】:2020-08-09 01:10:32
【问题描述】:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("privnote.com", 80))
#s = ssl.wrap_socket(s, keyfile=None, certfile=None, server_side=False, cert_reqs=ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_SSLv23)
def claim_note(note_url):
s.sendall(b'DELETE /'+note_url.encode()+b'HTTP/1.1\r\nX-Requested-With: XMLHttpRequest\r\nHost: privnote.com\r\n')
print(s.recv(4096))
这是我的代码,现在让我首先说除此之外我尝试了很多不同的东西。我试过 https 端口和 http 端口,443、80。我已经注释和取消注释用 ssl 包装套接字的语句。所有的结果都是一样的。要么 api 完全没有返回任何内容,要么 api 告诉我请求服务器无法理解。我正在查看一个 GitHub 存储库,并且只使用了一个标头,这是因为它是用于 x-requested-with 的 Ajax 调用。我尝试添加用户代理内容类型,现在我只使用主机和 x 请求。这是一个 DELETE 请求,url 是链接后的前 8 个字符。我还尝试在末尾添加 \r\n\r\n,甚至尝试了 content-length。我不知道还能做什么。我想知道服务器为什么这么说。
【问题讨论】:
-
由于您的代码当前状态,它发送一个无效请求,因为没有最后的空行(即
\r\n)。请解决此问题,然后重试,如果仍然无效,请提供您得到的确切响应,而不仅仅是您对它的解释。请通过编辑您的问题(以便错误与代码匹配)来修复代码并添加信息,而不仅仅是在评论中提供这些信息。 -
它已经在我的代码中...我尝试添加 \r\n
-
这不是我的解释,它的字面意思是“服务器无法理解您的请求”,返回标头和 400 状态码
-
“它已经在我的代码中了……” - 不是。您的请求以
\r\n结尾作为Host标题行的行尾。但是在那之后必须有一个额外的\r\n。如果有疑问,请参考 HTTP 标准 - 标准存在是有原因的。
标签: python-3.x sockets websocket