python-3.x - 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 ,甚至尝试过内容长度。我不知道还能做什么。我想知道服务器为什么这么说。
解决方案
您的代码存在多个问题。如果您实际打印出您尝试发送的请求,它将如下所示:
b'DELETE /node_urlHTTP/1.1\r\nX-Requested-With: XMLHttpRequest\r\nHost: privnote.com\r\n'
此行有两个问题:/node_url
and之间缺少空格,结尾处HTTP/1.1
缺少最后的\r\n
als 结尾标记。修复这些问题后,您将获得成功的响应 - 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 ...
推荐阅读
- python - 为什么我的 python 代码不输出浮点数?
- kubernetes - Jenkins-X 3 operator install 无法下载“jx3/jx-git-operator”
- vb.net - 转义表示 sql 查询的字符串中的双引号字符
- javascript - 在云函数中,写入 Firestore 子集合使用什么语法?
- javascript - 将 title 属性用于带有 fancybox4 的标题
- ruby-on-rails - 如何使用流程图构建自动化规则?
- typescript - 为什么我没有得到我的泛型的属性?
- python - Pandas Datareader 到 csv 文件结构交换
- c# - Newton JSON 如何将对象序列化为空括号?
- python - 带列的数据框