gpt4 book ai didi

Python HTTP 服务器未响应 POST 请求

转载 作者:太空狗 更新时间:2023-10-30 00:50:15 25 4
gpt4 key购买 nike

我想使用 python 制作一个 HTTP 服务器来托管我的网站。我已经实现了 do_GET() 方法并且它工作正常,但是当我尝试 POST 方法时,服务器没有响应,直到我重新加载页面。然后它醒来,试图完成 POST,但意识到连接已经结束。之后它服务于 GET 方法(因为我重新加载了页面)并继续正常运行。

我在客户端使用 jQuery,但我也尝试过 html 表单。即使我在另一个浏览器中打开页面也没有变化,所以它一定是服务器端的异常。

这是客户端javascript:

function Send()
{
jQuery.post("address", "Blah!", function (data) {
//get response
alert(data);
});
}

这是服务器代码(我使用的是 python 3.3.4):

class MyHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
def do_POST(self):
print("Data: " + str(self.rfile.read(), "utf-8")) #show request

response = bytes("This is the response.", "utf-8") #create response

self.send_response(200) #create header
self.send_header("Content-Length", str(len(response)))
self.end_headers()

self.wfile.write(response) #send response

这是来自服务器的日志:

10.175.72.200 - - [01/Apr/2014 19:11:26] "GET / HTTP/1.1" 200 -
Data: Blah!
10.175.72.200 - - [01/Apr/2014 19:11:47] "POST /address HTTP/1.1" 200 -
----------------------------------------
Exception happened during processing of request from ('10.175.72.200', 2237)
Traceback (most recent call last):
File "C:\Python33\lib\socketserver.py", line 306, in _handle_request_noblock
self.process_request(request, client_address)
File "C:\Python33\lib\socketserver.py", line 332, in process_request
self.finish_request(request, client_address)
File "C:\Python33\lib\socketserver.py", line 345, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Python33\lib\socketserver.py", line 666, in __init__
self.handle()
File "C:\Python33\lib\http\server.py", line 400, in handle
self.handle_one_request()
File "C:\Python33\lib\http\server.py", line 388, in handle_one_request
method()
File "C:\Users\Jirek\Desktop\Server\server.py", line 45, in do_POST
self.wfile.write(response) #send response
File "C:\Python33\lib\socket.py", line 317, in write
return self._sock.send(b)
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
----------------------------------------
10.175.72.200 - - [01/Apr/2014 19:11:47] "GET / HTTP/1.1" 200 -

可以看到,第一行是经典的GET请求。然后我从浏览器调用 POST,在重新加载之前没有任何反应。那时服务器写入日志的其余部分。

最佳答案

问题解决了!它位于代码加载接收到的数据的行中(在 do_POST() 中)。我只需要指定要读取的数据量。

所以,不要使用 rfile.read(),而是使用 rfile.read(numberOfBytes)。 POST 消息在 header 中保存了多大:numberOfBytes = int(self.headers["Content-Length"])

修复方法:

def do_POST(self):
length = int(self.headers["Content-Length"])
print("Data: " + str(self.rfile.read(length), "utf-8"))

response = bytes("This is the response.", "utf-8") #create response

self.send_response(200) #create header
self.send_header("Content-Length", str(len(response)))
self.end_headers()

self.wfile.write(response) #send response

关于Python HTTP 服务器未响应 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22793930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com