Ce face python -m http.server
python3 -m http.server pornește un server web în folderul curent, pe portul 8000. Deschizi în browser http://localhost:8000/ și vezi fișierele: index.html dacă există, altfel lista fișierelor. Fiecare cerere este afișată în terminal. Oprești serverul cu Ctrl+C.
Îl folosești ca să vezi local o pagină HTML care încarcă fișiere JavaScript sau JSON (browserele blochează multe lucruri când deschizi direct file://) sau ca să muți rapid un fișier pe alt calculator din aceeași rețea. Nu este făcut pentru producție: nu are autentificare și verifică doar elementele de bază de securitate.
Implicit ascultă pe toate interfețele, deci și alte calculatoare din rețea îl pot accesa. Cu -b 127.0.0.1 îl limitezi la calculatorul tău. Din cod, aceleași clase (ThreadingHTTPServer, SimpleHTTPRequestHandler) se folosesc pentru servere mici de test.
Parametri
| Parametru | Descriere |
|---|---|
port |
Portul, implicit 8000. |
-b, --bind adresa |
Adresa pe care ascultă, de exemplu 127.0.0.1. Implicit toate interfețele. |
-d, --directory folder |
Folderul servit. Implicit folderul curent. |
-p, --protocol versiune |
Versiunea HTTP, implicit HTTP/1.0. |
Ce returnează
Rulează până la Ctrl+C; afișează adresa și câte un rând pentru fiecare cerere.
Exemple
Exemplul 1: Servirea unui folder doar pe calculatorul tău
După ce browserul cere pagina principală și un fișier care nu există, terminalul arată cele două cereri (200 și 404).
python3 -m http.server 8000 -b 127.0.0.1 -d site
Ieșire în terminal
Serving HTTP on 127.0.0.1 port 8000 (http://127.0.0.1:8000/) ...
127.0.0.1 - - [25/Oct/2026 21:13:06] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [25/Oct/2026 21:13:06] code 404, message File not found
127.0.0.1 - - [25/Oct/2026 21:13:06] "GET /lipsa.html HTTP/1.1" 404 -
Exemplul 2: Același server pornit din cod, pentru un test
Portul 0 lasă sistemul să aleagă un port liber. Serverul rulează într-un fir separat, iar programul îl întreabă cu urllib.request. log_message este suprascrisă ca serverul să nu mai scrie în terminal.
import threading
import urllib.error
import urllib.request
from functools import partial
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
Path("site").mkdir()
Path("site/index.html").write_text("<h1>Magazinul Anei</h1>", encoding="utf-8")
class Handler(SimpleHTTPRequestHandler):
def log_message(self, format, *args):
pass
with ThreadingHTTPServer(("127.0.0.1", 0), partial(Handler, directory="site")) as server:
port = server.server_address[1]
threading.Thread(target=server.serve_forever, daemon=True).start()
with urllib.request.urlopen(f"http://127.0.0.1:{port}/") as raspuns:
print(raspuns.status, raspuns.headers["Content-Type"])
print(raspuns.read().decode("utf-8"))
try:
urllib.request.urlopen(f"http://127.0.0.1:{port}/lipsa.html")
except urllib.error.HTTPError as e:
print("Eroare:", e.code, e.reason)
e.close()
server.shutdown()
Rezultat
200 text/html
<h1>Magazinul Anei</h1>
Eroare: 404 File not found
Greșeli frecvente
- Pornești serverul fără
-b 127.0.0.1într-o rețea publică (cafenea, cămin): oricine din rețea îți poate vedea fișierele din folder. - Îl folosești ca server pentru un site public. Este un server de test; în producție folosește nginx, Apache sau un server de aplicații.
- Primești
OSError: [Errno 48] Address already in use(sauErrno 98pe Linux): portul e ocupat. Alege alt port:python3 -m http.server 8080.
Comenzi înrudite
requests.get(): Trimite o cerere HTTP GET și returnează răspunsul: cod de stare, antete, text sau JSON.subprocess.run(): Pornește un program extern, așteaptă să se termine și îi returnează rezultatul.