首页 > 解决方案 > Privnote 套接字服务器不理解请求

问题描述

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 ,甚至尝试过内容长度。我不知道还能做什么。我想知道服务器为什么这么说。

标签: python-3.xsocketswebsocket

解决方案


您的代码存在多个问题。如果您实际打印出您尝试发送的请求,它将如下所示:

b'DELETE /node_urlHTTP/1.1\r\nX-Requested-With: XMLHttpRequest\r\nHost: privnote.com\r\n'

此行有两个问题:/node_urland之间缺少空格,结尾处HTTP/1.1缺少最后的\r\nals 结尾标记。修复这些问题后,您将获得成功的响应 - 302 重定向到 HTTPS 版本:

b'HTTP/1.1 302 Found\r\nDate:...\r\nLocation: https://privnote.com/node_url ...

当使用 HTTPS 和有效的 node_url 重复请求时(使用无效的 node_url,您会收到一个错误,即 DELETE 是不允许的方法):

s.connect(("privnote.com", 443))
s = ssl.wrap_socket(s)

...
b'HTTP/1.1 200 OK\r\n ...

推荐阅读