Как да създадете прост http сървър в Python

Python е език, който предлага мощни инструменти за работа с уеб технологии.
Един от най-лесните начини да започнете с мрежовото програмиране е да създадете прост HTTP сървър.
В тази статия ще ви покажем как стъпка по стъпка да създадете такъв сървър.
Целта ни е да разберете основите и да имате работещ проект в рамките на минути.
Какво е HTTP сървър?
HTTP сървър е програма, която приема и отговаря на HTTP заявки от клиенти.
Най-често клиентът е уеб браузър, а сървърът връща уеб страница или ресурс.
Протоколът HTTP (HyperText Transfer Protocol) определя как се обменят данни по мрежата.
Сървърът „слуша“ на определен порт и обработва заявките, които получава.
Защо Python?
Python има вградени модули за работа с HTTP протокола.
Той позволява създаването на прост сървър с няколко реда код.
Не се изискват допълнителни библиотеки или сложни конфигурации.
Това прави Python идеален за обучение и прототипиране.
Необходими инструменти
Преди да започнем, трябва да имате следното инсталирано:
- Python 3 (препоръчително последна версия)
- Текстов редактор (напр. VS Code, Sublime Text, Notepad++)
Няма нужда от инсталиране на допълнителни библиотеки.
Метод 1: Използване на вградения http.server модул
Python идва с модул http.server
, който позволява лесно стартиране на сървър.
Стъпка 1: Стартирайте сървъра директно от терминал
Отворете терминала и изпълнете следната команда:
python -m http.server 8000
Това стартира сървър на порт 8000 в текущата директория.
След това можете да отворите браузър и да отидете на:
http://localhost:8000
Ще видите списък с файловете от директорията.
Как работи това?
http.server
използва SimpleHTTPRequestHandler
за обработка на заявките.
По подразбиране, той връща файлове от директорията, където е стартиран сървърът.
Метод 2: Създаване на собствен сървър с Python код
Можете да имате по-голям контрол, като създадете свой сървър с няколко реда код.
Стъпка 1: Създайте нов Python файл
Създайте файл с име my_server.py
.
Стъпка 2: Добавете следния код
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
html = f"<html><body><h1>Здравей, бай-Иване!</h1><p>Път: {self.path}</p></body></html>"
self.wfile.write(bytes(html, "utf8"))
server_address = ("", 8000)
httpd = HTTPServer(server_address, SimpleHandler)
print("Сървърът работи на http://localhost:8000")
httpd.serve_forever()
Обяснение на кода:
- Импортираме нужните класове от модула
http.server
- Създаваме клас
SimpleHandler
, който наследяваBaseHTTPRequestHandler
- Методът
do_GET
обработва GET заявките - Изпращаме статус код 200 и HTML отговор
- Сървърът се стартира на порт 8000
Как да тествате сървъра?
- Запазете файла
- Отворете терминал в същата папка
- Стартирайте сървъра с:
python my_server.py
- Отворете браузър и отидете на:
http://localhost:8000
Ще видите HTML страница с „Здравей, бай-Иване
!“ и пътя от URL адреса.
Какво представлява HTTP заявката?
Когато отворите адрес в браузър, той изпраща HTTP заявка до сървъра.
Типичната заявка изглежда така:
GET / HTTP/1.1
Host: localhost:8000
Сървърът отговаря с:
HTTP/1.1 200 OK
Content-type: text/html
<html>...</html>
Това е основата на комуникацията между клиент и сървър.
Как да добавите повече функционалност?
Можете да обработвате различни пътища с помощта на self.path
.
Например, добавете условия за различни страници:
def do_GET(self):
if self.path == "/":
message = "<h1>Начална страница</h1>"
elif self.path == "/info":
message = "<h1>Информация</h1>"
else:
message = "<h1>Страницата не съществува</h1>"
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(bytes(f"<html><body>{message}</body></html>", "utf8"))
Как да обслужвате статични файлове?
Можете да използвате os
модул, за да четете и връщате файлове.
Ето пример как да върнете HTML файл:
import os
def do_GET(self):
if self.path == "/":
filepath = "index.html"
else:
filepath = self.path[1:]
if os.path.exists(filepath):
with open(filepath, "rb") as file:
content = file.read()
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(content)
else:
self.send_response(404)
self.end_headers()
self.wfile.write(b"Файлът не е намерен")
Какво да направите след това?
След като разберете основите, можете да:
- Добавите POST заявки
- Използвате шаблони за HTML
- Прехвърлите проекта към framework като Flask или Django
Кратко обобщение
Създаването на прост HTTP сървър в Python е бързо и лесно.
Можете да започнете с вградения http.server
модул или да напишете собствен обработчик.
С тези знания вече имате основа за по-сложни уеб проекти.
Заключение
Създаването на HTTP сървър в Python е отличен начин да започнете с уеб програмиране.
Използвайки вградените инструменти, можете да изградите основен уеб сървър само с няколко реда код.
Оттук можете да надграждате знанията си и да преминете към по-сложни системи и технологии.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut