繁体   English   中英

Python http.server CGI

[英]Python http.server CGI

需要从本地 python 服务器运行带有 CGI 选项的 python 脚本

目前在我的 Apache 上,我使用 CGI 来获取任何人对我的 python 脚本所做的所有获取和发布请求,以告诉他们做事。

例如,如果我向 127.0.0.1:8080?filename=yomomma 发出 get 请求,我的 python 脚本应该打印“yomomma”

#!/usr/bin/python3

import cgi, os
form = cgi.FieldStorage()
fileitem = form['filename']
print(fileitem)

这是我在 python 中运行的服务器(我显然不知道我在做什么)

from http.server import *
from urllib import parse
import os
import cgi
class GetHandler(CGIHTTPRequestHandler):
    def do_GET(self):
        form = cgi.FieldStorage()
        self.send_response(200)
        self.send_header('Content-Type', 'text/html; charset=utf-8')
        self.end_headers()
        self.wfile.write('<meta http-equiv="refresh" content=1; URL=http://127.0.0.1:8080" /><pre>'.encode('utf-8'))
        self.wfile.write(str(os.popen('python my_site.py').read()).encode('utf-8'))

if __name__ == '__main__':
    from http.server import HTTPServer
    server = HTTPServer(('localhost', 8080), GetHandler)
    print('Starting server, use <Ctrl-C> to stop')
    server.serve_forever()

我希望能够将其指向任何 python 文件并获取该 python 文件以读取 CGI 参数

目前还不清楚你在这里要求做什么。

如果您只想在 HTTPServer 上运行 CGI 脚本,那很简单。 CGIHTTPRequestHandler 并不意味着被子类化,这是你所做的,你不需要重写 do_X 函数。 如果它在 cgi_directories 文件夹下,它就像任何其他服务器一样简单地返回 CGI 脚本的输出。 这个

因此,在主函数中,您将拥有:

server = HTTPServer(('localhost', 8080), CGIHTTPRequestHandler)

然后只需正常调用 CGI 脚本:

127.0.0.1:8080/cgi-bin/myscript.cgi?filename=yomomma

如果你想使用 http.server 来处理请求,你需要使用 BaseHTTPRequestHandler,而不是 CGIHTTPRequestHandler。 获取表单数据稍有不同,但很容易。 阅读的部分在“HTTP POST”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM