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

Как да създадете прост 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

Как да тествате сървъра?

  1. Запазете файла
  2. Отворете терминал в същата папка
  3. Стартирайте сървъра с:
python my_server.py
  1. Отворете браузър и отидете на:
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 е отличен начин да започнете с уеб програмиране.
Използвайки вградените инструменти, можете да изградите основен уеб сървър само с няколко реда код.
Оттук можете да надграждате знанията си и да преминете към по-сложни системи и технологии.

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:

×