Форум сайта python.su
Вопрос по httpBaseServer
Как перенаправлять по запросу GET на CGI скрипт?
# -*- coding: utf-8 -*- import BaseHTTPServer import CGIHTTPServer from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer server_address = ("192.168.1.*", 80) class HttpProcessor(CGIHTTPServer.CGIHTTPRequestHandler): cgi_directories = [ "/cgi-bin", "/cgi"] def do_GET(self): try: if not self.path == "/cgi/app.py": self.send_response(301) self.send_header("Location", "/cgi/app.py") self.end_headers() else: print "test" except IOError: self.send_error(404,"File Not Found: %s" % self.path) httpd = BaseHTTPServer.HTTPServer(server_address, HttpProcessor) httpd.serve_forever()
Отредактировано denko (Сен. 18, 2018 16:50:13)
Офлайн
Должно работаь с do_GET вы перехваатываете все GET запросы, и обрабатываете их сами а без него обрабатывает сам CGIHTTPServer.CGIHTTPRequestHandler хотя там только post запросы если см тут. https://github.com/python/cpython/blob/2.7/Lib/CGIHTTPServer.py
Вот так должно работать
# -*- coding: utf-8 -*- import BaseHTTPServer import CGIHTTPServer from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer server_address = ("127.0.0.1", 1987) class HttpProcessor(CGIHTTPServer.CGIHTTPRequestHandler): cgi_directories = [ "/cgi-bin", "/cgi"] def do_GET(self): try: if not self.path == "/cgi/app.py": self.send_response(301) self.send_header("Location", "/cgi/app.py") self.end_headers() else: # выполняем cgi скрипт. if self.is_cgi(): self.run_cgi() else: self.send_error(501, "Error") # Что-то не то произошло и обращение к не cgi скрипту except IOError: self.send_error(404,"File Not Found: %s" % self.path) httpd = BaseHTTPServer.HTTPServer(server_address, HttpProcessor) httpd.serve_forever()
Отредактировано BM21 (Сен. 19, 2018 11:24:03)
Офлайн
BM21Дело в том, что мне не нужно здесь ничего отсылать, я перенаправляю на /cgi/app.py, а там лежит скрипт cgi, который и должен выполниться. И отослать в браузер что-нибудь.
Вы просто не посылаете в ответ на запрос ничего.Там где print testВот так работает у меня
Офлайн
См пост мой выше, я не тот отредактировал но суть понятна.
Офлайн
BM21Спасибо, так заработало.
См пост мой выше, я не тот отредактировал но суть понятна.
Офлайн