我有两个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()
问题在于当客户端调用conn.close()时,服务器会在self.rfile.read()上挂起,但是如果在客户端调用conn.close(),那么客户端就无法从服务器接收响应。这会出现这样一种情况:要么从服务器获取响应,要么读取POST数据,但永远都不能同时实现两者。我认为我错过了某些可以解决这个问题的事情。
额外信息:
conn.getresponse()导致客户端挂起,直到从服务器收到响应。看起来只有在服务器函数执行完成后,才能接收到响应。