Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 18, 2018 16:48:05

denko
Зарегистрирован: 2018-09-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

BaseHttpServer как правильно перенаправлять на cgi скрипт

Вопрос по 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, оно перенаправляет на адрес, но сам скрипт становится недоступен. Ни напрямую, ни с перенаправлением.

Отредактировано denko (Сен. 18, 2018 16:50:13)

Офлайн

#2 Сен. 18, 2018 19:09:26

BM21
Зарегистрирован: 2018-09-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

BaseHttpServer как правильно перенаправлять на cgi скрипт

Должно работаь с 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

Отредактировано BM21 (Сен. 19, 2018 11:24:03)

Офлайн

#3 Сен. 19, 2018 10:33:21

denko
Зарегистрирован: 2018-09-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

BaseHttpServer как правильно перенаправлять на cgi скрипт

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

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

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

Как правильно разрулить перенаправление на скрипт, при любом запросе GET?

Офлайн

#4 Сен. 19, 2018 11:24:24

BM21
Зарегистрирован: 2018-09-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

BaseHttpServer как правильно перенаправлять на cgi скрипт

См пост мой выше, я не тот отредактировал но суть понятна.

Офлайн

#5 Сен. 19, 2018 12:18:55

denko
Зарегистрирован: 2018-09-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

BaseHttpServer как правильно перенаправлять на cgi скрипт

BM21
См пост мой выше, я не тот отредактировал но суть понятна.
Спасибо, так заработало.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version