Найти - Пользователи
Полная версия: BaseHttpServer как правильно перенаправлять на cgi скрипт
Начало » Python для новичков » BaseHttpServer как правильно перенаправлять на cgi скрипт
1
denko
Вопрос по 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()
Если убираю def do_GET, то к скрипту могу получить доступ по адресу address/cgi/app.py

Добавляю обратно do_GET, оно перенаправляет на адрес, но сам скрипт становится недоступен. Ни напрямую, ни с перенаправлением.
BM21
Должно работаь с 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()

R
denko
BM21
Вы просто не посылаете в ответ на запрос ничего.Там где print testВот так работает у меня
Дело в том, что мне не нужно здесь ничего отсылать, я перенаправляю на /cgi/app.py, а там лежит скрипт cgi, который и должен выполниться. И отослать в браузер что-нибудь.

Как его запустить, вот это не понимаю.

И если функцию обработки do_GET убрать, то при прямом обращению к скрипту он отрабатывает, а если как в примере выше, то скрипт даже при прямом обращении не работает.

Как правильно разрулить перенаправление на скрипт, при любом запросе GET?
BM21
См пост мой выше, я не тот отредактировал но суть понятна.
denko
BM21
См пост мой выше, я не тот отредактировал но суть понятна.
Спасибо, так заработало.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB