读取 Python 中的 HTTP 请求数据 3?

Read HTTP request data in Python 3?

我正在尝试编写一个基本的 "echo" HTTP 服务器,用于写回它在请求中收到的原始数据。如何获取字符串形式的请求数据?

这是我的程序:

#!/usr/bin/env python
from http.server import HTTPServer, BaseHTTPRequestHandler


class RequestHandler(BaseHTTPRequestHandler):
  def do_GET(self):
    print('data', self.rfile.readall())
    self.send_response(200)
    self.send_header('Content-Type', 'text/html')
    self.end_headers()
    message = 'Hello Client!'
    self.wfile.write(bytes(message, 'utf8'))
    return

def server_start():
  address = ('', 1992)
  httpd = HTTPServer(address, RequestHandler)
  httpd.serve_forever()


server_start()

错误:

self.rfile.readall(): '_io.BufferedReader' object has no attribute 'readall'

如果是获取请求,则不会有 body,因此数据将在 url.

中发送
from http.server import HTTPServer, BaseHTTPRequestHandler
import urlparse

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        parsed_path = urlparse.urlparse(self.path)
        print(parsed_path.query)
        ...

否则,如果您想将任何更复杂的对象作为数据发送,则应实现 POST 方法(如果您不熟悉它们,请查看不同的 HTTP methods)。

post 方法类似于:

def do_POST(self):
    post_body = self.rfile.readall()

注意这里你可以使用方法rfile.readall()。在这里你有一个很好的 gist 和一些例子!