CGIHTTPRequestHandler запустить PHP или Python скрипт в Python
Я пишу простой Python веб-сервер на Windows..
это работает, но теперь я хочу запускать динамические скрипты (php или py), а не только HTML-страницы..
вот мой код:
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
class RequestsHandler(CGIHTTPRequestHandler):
cgi_directories = ["/www"] #to run all scripts in '/www' folder
def do_GET(self):
try:
f = open(curdir + sep + '/www' + self.path)
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(f.read())
f.close()
except IOError:
self.send_error(404, "Page '%s' not found" % self.path)
def main():
try:
server = HTTPServer(('', 80), RequestsHandler)
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__ == '__main__':
main()
если я помещаю код php в папку www, я получаю страницу, но код не интерпретируется
что мне нужно сделать? Спасибо
3 ответа
Ваш первый веб-сайт CGI на Python
Для тех, кто создает свой первый веб-сервер, я сопоставил этот простой пример со всеми необходимыми шагами, чтобы заставить его работать. Необходимо создать два файла. Первый, server.py, - это сценарий, запускающий веб-сервер. Второй - это сценарий Python CGI, который сервер запускает и отправляет свой вывод в браузер в виде "веб-страницы".
Сначала создайте папку проекта для сервера, например, simple_server в вашем домашнем каталоге или в любом другом месте, где вы хотите разместить свои проекты.
В этой папке создайте подпапку cgi-bin. Затем скопируйте первый скрипт в файл server.py и поместите его в simple_server. Затем создайте файл my_cgi_script.py и поместите его в папку cgi-bin. Эти файлы находятся ниже в тексте этого руководства.
Структура каталогов должна выглядеть так:
|
-- [simple_server]
|
-- server.py
|
-- [cgi-bin]
|
-- my_cgi_script.py
Вам нужно будет установить разрешения для my_cgi_script.py, чтобы сделать его исполняемым - иначе веб-сервер не сможет запустить его для генерации вывода веб-страницы. Если у вас Linux или MacOS, введите в командной оболочке:
$ chmod +x cgi-bin/my_cgi_script.py
В Windows найдите файл с помощью проводника, щелкните его правой кнопкой мыши и убедитесь, что его разрешения разрешают выполнение.
Откройте командную оболочку и cd
в папку simple_server и выполните скрипт server.py:
$ cd simple_server
$ python server.py
Он должен работать без вывода сообщений. Затем в новой вкладке в вашем любимом браузере перейдите по этому URL-адресу:
http://localhost:8000/cgi-bin/my_cgi_script.py
"Привет мир!" должен отображаться в браузере с большим количеством пробелов в качестве веб-страницы (ищите его в верхнем левом углу, если вы не видите его сразу). Вот и все! Вы создали свой первый веб-сайт с Python CGI!
server.py
from http.server import HTTPServer, CGIHTTPRequestHandler
if __name__ == '__main__':
try:
CGIHTTPRequestHandler.cgi_directories = ['/cgi-bin']
httpd = HTTPServer(('', 8000), # localhost:8000
CGIHTTPRequestHandler) # CGI support.
print(f"Running server. Use [ctrl]-c to terminate.")
httpd.serve_forever()
except KeyboardInterrupt:
print(f"\nReceived keyboard interrupt. Shutting down server.")
httpd.socket.close()
cgi-bin / my_cgi_script.py
#!/usr/bin/env python
# The line above ^ is important. Don't leave it out. It should be at the
# top of the file.
import cgi, cgitb # Not used, but will be needed later.
print("Content-type: text/html\n\n")
print("hello world!")
Если он у вас запущен, вы можете спросить: "Что только что произошло?" server.py настроен и работает на веб-сервере. Он настроен на запуск скриптов с использованиемCGIHTTPRequestHandler
. Этот обработчик запросов будет запускать файлы в папке cgi-bin как сценарии. Для этого используется командная оболочка.
В верхней части my_cgi_script.py, в#!/usr/bin/env python
Строка указывает командной оболочке выполнить код в файле с помощью интерпретатора Python.
URL-адрес, введенный вами в браузере, воспринимается сервером как путь к файлу - в данном случае сценарий CGI, my_cgi_script.py, в папке cgi-bin:http://localhost:8000/cgi-bin/my_cgi_script.py
Если вы посмотрите на командную оболочку, в которой работает сервер, вы увидите сообщения с подробным описанием обрабатываемого веб-трафика. Каждый раз, когда вы обращаетесь к этому серверному процессу, он будет выводить больше сообщений - попробуйте обновить в браузере и посмотреть.
Теперь вы можете изменить my_cgi_script.py, чтобы выводить больше текста, или вы можете настроить вывод HTML-тегов и создать более интересную веб-страницу.
Чтобы создать веб-страницу, включающую сценарий CGI, создайте файл с именем index.html и поместите его в папку с server.py - содержимое index.html показано ниже.
index.html
<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<!-- Simple example to include text from the CGI script in this web page. -->
<object type="text/html" data="/cgi-bin/my_cgi_script.py"></object>
</body>
</html>
Структура каталогов теперь должна выглядеть так:
|
-- [simple_server]
|
-- server.py
|
-- index.html
|
-- [cgi-bin]
|
-- my_cgi_script.py
Как только это будет сделано, если вы остановили серверный процесс, запустите его снова и попробуйте перейти к http://localhost:8000
и убедитесь, что вы видите "hello world!" ниже "Мой первый абзац". index.html - это специальное имя файла, которое веб-серверы используют в качестве страницы по умолчанию для своих URL-адресов. Теперь у вас есть все необходимое для создания отличного веб-сайта!
В дальнейшем существуют различные мнения о том, какой должна быть лучшая среда веб-разработки для обучения или серьезной разработки. Из этого примера вы должны получить представление об очень простой конфигурации, настройке и взаимодействии браузера / сервера.
Итак, теперь вопрос в том, что делать дальше? Вы можете продолжить следовать указанной выше модели и узнать, как добавить больше функций в основной сайт с помощью скриптов Python CGI и связать их для формирования действий на странице HTML. Это был бы совершенно правильный путь, и вы, вероятно, многому научитесь.
Кто-то порекомендовал мне хороший сайт, который использует качественный веб-сервер под названием Django. Насколько я понимаю, в нем есть очень хорошие руководства и другие ресурсы, которые помогут начать веб-разработку.
Этот сайт называется Django Girls Tutorial. Не обращайте внимания на название сайта, любой может извлечь выгоду из этого учебника, и он дает очень хорошее введение в инструменты и технологии, которые вам понадобятся для продвижения в веб-разработке с Django.
Django Girls - активное сообщество разработчиков для женщин, которое проводит мероприятия по всему миру и связывает их с другими людьми, которые могут помочь в их прогрессе.
Учебник для девочек Django: https://tutorial.djangogirls.org/en/
Более подробные примеры Python CGI: https://www.tutorialspoint.com/python/python_cgi_programming.htm
Для изучения HTML на этом сайте есть хорошие руководства: https://www.w3schools.com/html/default.asp
Ссылка на модуль поддержки CGI, cgi: https://docs.python.org/3/library/cgi.html
Документацию, включающую классы, используемые в этом примере, можно найти по адресу: https://docs.python.org/2/library/internet.html.
Я думаю, что вы закончили разработку.
#!/usr/bin/env python
import CGIHTTPServer
def main():
server_address = ('', 8000)
handler = CGIHTTPServer.CGIHTTPRequestHandler
handler.cgi_directories = ['/cgi']
server = CGIHTTPServer.BaseHTTPServer.HTTPServer(server_address, handler)
try:
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__ == '__main__':
main()
Вы сделали исполняемый файл php?? chmod +x spam.php (для Linux я понятия не имею, как сделать файлы исполняемыми на windows)
Вам также понадобится установить интерпретатор PHP на вашем ПК
источник из ответа ЗДЕСЬ
Вам также следует рассмотреть возможность использования ЭТОГО в качестве косвенной альтернативы.
Проблема с классом CGIHTTPServer. Он не устанавливает переменные CGI env. Это было исправлено здесь:
https://github.com/gabrielgrant/tonto/blob/master/tonto.py