-
وب سروری ساده با پایتون
پایتون یکی از زبان های مطرح برای ساخت برنامه های رابط وب و با سازنده وب هست .
امروز من یه وب سرور ساده رو با پایتون براتون نوشتم.
طرز کارش هم خیلی ساده هست .
آدرس localhost رو روی پورت 80 وب میگیره و بعد هر آدرسی که به صورت دایرکتوری یعنی ( localhost/anything ) از طریق مرورگر یا هر چیز دیگه ای که به لوکال هاست روی پورت هشتاد کانکت هست رو میگیره ( از طریق خواندن web headers و خط اولیش یعنی دستوری شبیه ( GET / HTTP/1.0rn ) و توی دایرکتوری که وجود داره میگرده و فایل مورد نظر رو میخونه و سورسش رو به عنوان response ارسال میکنه .
طرز کارکرد وب سرور هایی مثل آپاچی و یا nginx و یا IIS هم دقیقا همینطوره منتها یکم پیشرفته تر ( مثلا کدها رو با برنامه های PHP و یا ASP.NET و MYSQL تفسیر می کنند و بعد ریسپانس ها رو می فرستن و البته امنیتشون بیشتره )
این وب سرور هم که ما ساختیم جوری تنظیم شده که فقط درون دایرکتوری که خود فایل سرور قرار داره بگرده و بیرون از اونجا نمیتونه کاری کنه .
این وب سرور فقط جنبه آموزشی داره که یکم با طرز کار وب سرور ها و خود وب آشنا بشید و لا غیر .
کد:
#!/usr/bin/env python3
import socket
import os
sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
host = "127.0.0.1"
port = 80
sock.bind((host, port))
sock.listen(1)
def spliter(headers):
h = str(headers, "utf_8")
h = h.split("rn")[0]
cwd = os.getcwd()
a = os.path.join(cwd, h.split()[1][1:])
try:
if h.split()[1] == "/":
li = os.listdir(cwd)
if "index.html" in li:
a = os.path.join(cwd, "index.html")
if a.split(".")[-1] not in "html HTML Html".split():
raise FileNotFoundError()
fh = open(a, "r")
return (bytes(fh.read(), "utf_8"), a, h)
except (FileNotFoundError):
return (b""" Page Not Found (404)
""", a, h)
while True:
a, b = sock.accept()
print("{}:{} Connected".format(*b))
x = a.recv(256**2)
if len(x):
r = spliter(x)
print("HTTP Request received : ", r[2])
print("Directory", r[1])
a.sendall(r[0])
a.close()
منبع:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]