HttpServer в качестве простого HTTP-сервера в Python
Этот модуль служит очень быстрым и простым способом запустить локальный Http-сервер в вашей сети.
Ранее в Python 2.7 этот модуль назывался HttpServer . Но в Python3 этот модуль был объединен с модулем http.server . Давайте начнем и запустим наш собственный Http-сервер.
Импорт модуля httpserver
Этот модуль входит в состав стандартной библиотеки, поэтому устанавливать его не нужно. Чтобы импортировать этот модуль, просто используйте следующую инструкцию:
Теперь все готово к запуску сервера. Теперь давайте напишем немного кода для обслуживания файлов.
Запуск HTTP-сервера
Если вы просто хотите поделиться своими файлами и каталогами с другим пользователем, вы можете напрямую запустить сервер с помощью Python.
Перейдите в любой каталог, которым вы хотите поделиться, и запустите сервер оттуда, используя:
Здесь мы запускаем наш локальный Http-сервер на порту 9000.
Подключение
Теперь, чтобы подключиться к локальному серверу, необходимо проделать следующие шаги:
- Зайдите на сервер и узнайте IP-адрес сервера с помощью arp -a в Windows или ip -a | grep inet в Linux.
- На удаленном клиенте просто введите http://IP_ADDRESS:9000/ в своем браузере.
Обратите внимание, что вы можете просмотреть файлы сервера или даже загрузить их на клиентскую машину.
Запуск HttpServer, который обслуживает настраиваемый файл index.html
Хотя сервер по умолчанию удобен для прямого обмена файлами, вы можете настроить сервер, запустив отдельный файл.
Например, мы будем запускать собственный Http-сервер, который использует http.server и socketserver для связи TCP.
MyHttpRequestHandler вызывает метод do_GET() для обслуживания запроса. Чтобы обслужить пользовательский файл для запроса, мы можем переопределить функцию, просто определив другой метод do_GET(), который возвращает другое значение.
# server.py import http.server # Our http server handler for http requests import socketserver # Establish the TCP Socket connections PORT = 9000 class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler): def do_GET(self): self.path = 'index.html' return http.server.SimpleHTTPRequestHandler.do_GET(self) Handler = MyHttpRequestHandler with socketserver.TCPServer(("", PORT), Handler) as httpd: print("Http Server Serving at port", PORT) httpd.serve_forever()
Если вы назовете это как server.py , вы можете запустить http-сервер, используя:
Поскольку мы определили нашу пользовательскую функцию do_GET(), мы можем обслуживать HTML-файл домашней страницы, используя наш сервер, которым в данном случае является index.html. Также, если сервер работает в вашей системе, вы можете напрямую получить доступ к серверу, используя localhost: вместо использования IP.
Запуск простого HTTP сервера из Python
В python есть встроенный модуль для быстрого запуска простого HTTP сервера. Для запуска достаточно выполнить одну команду.
№ python -m SimpleHTTPServer
По умолчанию это запустит HTTP сервер на порту 8000. Данный HTTP сервер опубликует содержимого текущего каталога.
Чаще всего я использую этот способ, чтобы быстро опубликовать файлы из произвольного каталога хоста Linux по HTTP, и скачать файлы на другое устройство. Например, мне нужно скачать определенный лог файл из каталога /var/log.
Для этого нужно перейти в указанный каталог:
И запустить HTTP сервер python:
$ python3 -m http.server 8080
Если этот порт закрыт файерволом, нужно предварительно временно открыть его:
$ sudo firewall-cmd —add-port=8080/tcp
Теперь на другом устройства откройте браузер, перейдите по адресу http://192.168.79.128:8080 и скачайте нужные файлы.
HTTP сервер пишет в консоль лог всех обращений к файлам (HTTP GET).
Затем вернитесь в консоль Linux и завершите процесс веб сервера Python, нажав Ctrl+C .
Этот трюк можно использовать в том числе для передачи файлов из WSL в Windows.