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请求的Ajax调用。我尝试添加用户代理内容类型,现在只使用host和x请求。这是一个DELETE请求,URL是链接后的前8个字符。我还尝试在末尾添加\ r \ n \ r \ n,甚至尝试内容长度。我不知道该怎么办我想知道为什么服务器这么说。
答案 0 :(得分:1)
您的代码有多个问题。如果您实际打印出了您要发送的请求,它将看起来像这样:
b'DELETE /node_urlHTTP/1.1\r\nX-Requested-With: XMLHttpRequest\r\nHost: privnote.com\r\n'
此行有两个问题:/node_url
和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 ...