读取 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 和一些例子!
我正在尝试编写一个基本的 "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 和一些例子!