我试图写一个基本的“回声”的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'
如果它是一个GET请求不会有一个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一些例子!