根据http.server documentation BaseHTTPRequestHandler可以处理POST请求。
类http.server.BaseHTTPRequestHandler(request,client_address, 服务器)¶该类用于处理到达的HTTP请求 服务器。它本身不能响应任何实际的HTTP请求; 它必须被子类化以处理每个请求方法(例如GET或 的 POST )。 BaseHTTPRequestHandler提供了许多类和实例变量,以及子类使用的方法。
然而,低于它,说:
do_POST()此方法提供“POST”请求类型,仅允许使用 CGI脚本。错误501,“只能POST到CGI脚本”,输出时 尝试POST到非CGI网址。
这部分文档是什么意思?这不是自相矛盾,还是我误解了什么?
编辑:为了澄清,我尝试的以下方法似乎有用,我只想知道do_POST的文档是什么意思。
from os import curdir
from os.path import join as pjoin
import requests
from http.server import BaseHTTPRequestHandler, HTTPServer
port = 18888
class StoreHandler(BaseHTTPRequestHandler):
store_path = pjoin(curdir, 'store.json')
def do_POST(self):
if self.path == '/store.json':
print("Got a connection from", self.client_address)
length = self.headers['content-length']
data = self.rfile.read(int(length))
print(data)
with open(self.store_path, 'w') as fh:
fh.write(data.decode())
self.send_response(200)
self.end_headers()
server = HTTPServer(('localhost', port), StoreHandler)
server.serve_forever()
答案 0 :(得分:0)
do_POST()
是CGIHTTPRequestHandler
的方法。其默认行为不会以任何方式影响BaseHTTPRequestHandler
。
答案 1 :(得分:0)
CGIHTTPRequestHandler是SimpleHTTPRequestHandler的子类,它是BaseHTTPRequestHandler的子类(我通过查看SimpleHTTPServer.py和CGIHTTPServer.py的源代码找到了这一点。以下部分:
do_POST()此方法为' POST'提供服务。请求类型,仅允许CGI脚本。尝试POST到非CGI URL时输出错误501“只能POST到CGI脚本”。
指CGIHTTPRequestHandler,而不是BaseHTTPRequestHandler!参见: