Python で POST リクエストを送受信する方法を理解するために使用している次の 2 つの Python スクリプトがあります。
クライアント:
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() は、サーバーから応答を受信するまでクライアントをハングさせます。サーバー上の関数の実行が完了するまで、応答は受信されないようです。