Streszczenie
  • Prosty serwer HTTP z http.server
  • Routing i obsługa różnych ścieżek
  • Obsługa zapytań POST
  • Podsumowanie
Budowa prostego serwera HTTP w Pythonie

Tworzenie prostego serwera HTTP w Pythonie od podstaw to doskonały sposób na zrozumienie fundamentów aplikacji webowych. Zamiast od razu korzystać z frameworków takich jak Flask czy Django, możesz zbudować podstawowy serwer, który obsługuje zapytania HTTP, parsuje ścieżki URL i generuje odpowiedzi. To ćwiczenie pozwala zobaczyć, co faktycznie dzieje się "pod spodem" w aplikacjach webowych i lepiej wykorzystać możliwości frameworków, które abstrakcjonują te mechanizmy.

Python oferuje wbudowany moduł http.server, który pozwala na szybkie stworzenie działającego serwera HTTP, jednak dla większej kontroli warto użyć biblioteki socketserver lub bezpośrednio socket. Poniżej znajdziesz praktyczne przykłady, które pokazują jak krok po kroku zbudować serwer obsługujący podstawowe żądania HTTP.

Prosty serwer HTTP z http.server

Najprostszy sposób na uruchomienie serwera HTTP w Pythonie to użycie modułu http.server, który dostarcza podstawowy serwer HTTP oraz obsługę plików statycznych:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 from http.server import HTTPServer, BaseHTTPRequestHandler class SimpleHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() self.wfile.write(b'<h1>Hello, World!</h1>') if __name__ == '__main__': server = HTTPServer(('localhost', 8000), SimpleHandler) print('Serwer uruchomiony na http://localhost:8000') server.serve_forever()

Routing i obsługa różnych ścieżek

Prawdziwy serwer webowy musi obsługiwać różne ścieżki URL i zwracać odpowiednie odpowiedzi. Oto przykład implementacji prostego routingu:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 from http.server import HTTPServer, BaseHTTPRequestHandler import json class RouterHandler(BaseHTTPRequestHandler): routes = { '/': 'home', '/api': 'api', '/about': 'about' } def do_GET(self): path = self.path.split('?')[0] # Usuń query string if path in self.routes: handler = getattr(self, f'handle_{self.routes[path]}') handler() else: self.send_error(404, "Not Found") def handle_home(self): self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() self.wfile.write(b'<h1>Strona główna</h1>') def handle_api(self): self.send_response(200) self.send_header('Content-type', 'application/json') self.end_headers() data = {'message': 'Hello from API', 'status': 'ok'} self.wfile.write(json.dumps(data).encode()) def handle_about(self): self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() self.wfile.write(b'<h1>O nas</h1><p>Prosty serwer HTTP w Pythonie</p>') if __name__ == '__main__': server = HTTPServer(('localhost', 8000), RouterHandler) print('Serwer uruchomiony na http://localhost:8000') server.serve_forever()

Obsługa zapytań POST

Kurs · 24 lekcje8h 14m
Kurs

Kurs Python dla początkujących — PyStart

Zacznij programować w Pythonie! Idealne dla osób bez doświadczenia. Praktyczne zadania, projekty i wsparcie społeczności.

  • 24 lekcje wideo + 80 ćwiczeń
  • Realne bazy z e-commerce
  • Społeczność i code-review
499 zł799 zł−38%
Rozpocznij naukę

Obsługa zapytań POST wymaga odczytania danych z ciała żądania:

Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from http.server import HTTPServer, BaseHTTPRequestHandler import json class PostHandler(BaseHTTPRequestHandler): def do_POST(self): content_length = int(self.headers['Content-Length']) post_data = self.rfile.read(content_length) try: data = json.loads(post_data.decode('utf-8')) # Przetwórz dane response = {'received': data, 'status': 'success'} self.send_response(200) self.send_header('Content-type', 'application/json') self.end_headers() self.wfile.write(json.dumps(response).encode()) except json.JSONDecodeError: self.send_error(400, "Invalid JSON") if __name__ == '__main__': server = HTTPServer(('localhost', 8000), PostHandler) print('Serwer uruchomiony na http://localhost:8000') server.serve_forever()

Podsumowanie

Newsletter · co środę

Python co tydzień — newsletter dla programistów

Otrzymuj codzienne ćwiczenia, ciekawostki z ekosystemu Pythona i wskazówki do rozmów rekrutacyjnych.

2 312 czytelników · ⭐ 4,8

Budowa prostego serwera HTTP od podstaw to doskonałe ćwiczenie pozwalające zrozumieć:

  • Cykl żądania-odpowiedzi w aplikacjach webowych
  • Routing i obsługę różnych ścieżek URL
  • Obsługę metod HTTP (GET, POST)
  • Formatowanie odpowiedzi w HTML i JSON

Te umiejętności są podstawą do pracy z frameworkami webowymi w Pythonie.

Część 23 z 26

Jak połączyć Django lub FastAPI z Reactem

druga lekcja cyklu „Flask vs FastAPI: Porównanie frameworków webowych w Pythonie"

Czytaj kolejny →