Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Privnote套接字服务器无法理解请求_Python 3.x_Sockets_Websocket - Fatal编程技术网

Python 3.x Privnote套接字服务器无法理解请求

Python 3.x Privnote套接字服务器无法理解请求,python-3.x,sockets,websocket,Python 3.x,Sockets,Websocket,这是我的代码,现在让我首先说,除了这个,我已经尝试了很多不同的事情。我尝试了https端口和http端口,443,80。我已经注释并取消注释了用ssl封装套接字的语句。结果都一样。要么api完全不返回任何内容,要么api告诉我请求无法被服务器理解。我在看一个GitHub repo,只使用了一个头,这是因为它用于一个Ajax调用,该调用是x-request-with。我尝试添加用户代理内容类型,现在我只使用主机和x请求。这是一个删除请求,url是链接后的前8个字符。我还尝试在结尾添加\r\n\r\

这是我的代码,现在让我首先说,除了这个,我已经尝试了很多不同的事情。我尝试了https端口和http端口,443,80。我已经注释并取消注释了用ssl封装套接字的语句。结果都一样。要么api完全不返回任何内容,要么api告诉我请求无法被服务器理解。我在看一个GitHub repo,只使用了一个头,这是因为它用于一个Ajax调用,该调用是x-request-with。我尝试添加用户代理内容类型,现在我只使用主机和x请求。这是一个删除请求,url是链接后的前8个字符。我还尝试在结尾添加\r\n\r\n,甚至尝试了内容长度。我不知道还能做什么。我想知道服务器为什么这么说。

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

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))
这一行有两个问题:在
/node\u url
HTTP/1.1
之间缺少空格,在末尾缺少最后的
\r\n
als页眉结束标记。一旦这些问题得到解决,您将获得一个成功的响应-302重定向到HTTPS版本:

b'DELETE /node_urlHTTP/1.1\r\nX-Requested-With: XMLHttpRequest\r\nHost: privnote.com\r\n'
使用HTTPS和有效的节点\u url重复请求时(使用无效的节点\u url,您会得到一个错误,删除是不允许的方法):


由于没有最后一行空行(即
\r\n
),因此您的代码当前处于运行状态,它将发送一个无效的请求。请修复此问题,然后重试,如果仍然不起作用,请提供您得到的确切响应,而不仅仅是您对它的解释。请通过编辑您的问题(以便错误与代码匹配)来修复代码并添加信息,而不仅仅是在注释中提供这些信息。它已经在我的代码中。。。我尝试添加\r\n这不是我的解释,它字面上说“服务器无法理解您的请求”,返回标题和400状态代码“它已经在我的代码中…”-不是。请求以
\r\n
结尾,作为
主机
标题行的行尾。但在此之后必须有一个附加的
\r\n
。如果有疑问,请参考HTTP标准-标准存在是有原因的。这很奇怪,因为这就是所使用的方法。它很容易复制,不过还是要感谢您提供的信息。@Noah:只有在节点url未知的情况下才会出现错误。请参阅更新的答案。
b'HTTP/1.1 302 Found\r\nDate:...\r\nLocation: https://privnote.com/node_url ...
s.connect(("privnote.com", 443))
s = ssl.wrap_socket(s)

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