发布到非CGI脚本?

时间:2015-05-18 18:35:50

标签: python python-3.x

根据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()

2 个答案:

答案 0 :(得分:0)

记录的{p> do_POST()CGIHTTPRequestHandler的方法。其默认行为不会以任何方式影响BaseHTTPRequestHandler

答案 1 :(得分:0)

CGIHTTPRequestHandler是SimpleHTTPRequestHandler的子类,它是BaseHTTPRequestHandler的子类(我通过查看SimpleHTTPServer.pyCGIHTTPServer.py的源代码找到了这一点。以下部分:

  

do_POST()此方法为' POST'提供服务。请求类型,仅允许CGI脚本。尝试POST到非CGI URL时输出错误501“只能POST到CGI脚本”。

指CGIHTTPRequestHandler,而不是BaseHTTPRequestHandler!参见: