我有这两个 Python 脚本,用于尝试解决如何在 Python 中发送和接收 POST 请求:
客户端:
import httplib
conn = httplib.HTTPConnection("localhost:8000")
conn.request("POST", "/testurl")
conn.send("clientdata")
response = conn.getresponse()
conn.close()
print(response.read())
服务器:
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
ADDR = "localhost"
PORT = 8000
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
print(self.path)
print(self.rfile.read())
self.send_response(200, "OK")
self.end_headers()
self.wfile.write("serverdata")
httpd = HTTPServer((ADDR, PORT), RequestHandler)
httpd.serve_forever()
问题是服务器在 self.rfile.read() 上挂起,直到在客户端上调用 conn.close() 但如果在客户端上调用 conn.close() ,则客户端无法接收来自服务器的响应。这会产生一种情况,即可以从服务器获得响应或读取 POST 数据,但不能同时读取两者。我认为这里缺少一些可以解决此问题的东西。
附加信息:
conn.getresponse() 导致客户端挂起,直到收到来自服务器的响应。在服务器上的函数完成执行之前,似乎没有收到响应。