از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
ارائه فایل ها با ماژول SimpleHTTPServer پایتون
سرفصلهای مطلب
معرفی
سرورها نرم افزار یا سخت افزار کامپیوتری هستند که درخواست ها را پردازش کرده و داده ها را از طریق شبکه به مشتری تحویل می دهند. انواع مختلفی از سرورها وجود دارد که رایج ترین آنها سرورهای وب، سرورهای پایگاه داده، سرورهای برنامه و سرورهای تراکنش هستند.
وب سرورهای پرکاربرد مانند آپاچی، میمون، و اره منبت کاری اره مویی هنگام آزمایش پروژه های ساده، راه اندازی بسیار زمان بر است و تمرکز توسعه دهنده از تولید منطق برنامه به راه اندازی یک سرور تغییر می کند.
پایتون SimpleHTTPServer
ماژول یک ابزار مفید و ساده است که توسعه دهندگان می توانند برای چندین مورد استفاده از آن استفاده کنند، که اصلی ترین آن این است که راهی سریع برای ارائه فایل ها از یک دایرکتوری است.
کار پر زحمت را از بین می برد process مرتبط با نصب و پیاده سازی وب سرورهای چند پلتفرمی موجود است.
توجه داشته باشید: در حالی که SimpleHTTPServer
یک راه عالی برای ارائه آسان فایل ها از یک دایرکتوری است، نباید در یک محیط تولید استفاده شود. طبق اسناد رسمی پایتون، “فقط بررسی های امنیتی اولیه را اجرا می کند.”
سرور HTTP چیست؟
HTTP مخفف پروتکل انتقال ابرمتن. اجازه دهید یک پروتکل را به عنوان یک زبان گفتاری مانند انگلیسی در نظر بگیریم. انگلیسی مجموعه ای از قوانین و واژگان دارد. بنابراین، اگر هر دو قواعد و واژگان تعریف کننده زبان انگلیسی را درک کنیم، میتوانیم به طور موثر در این زبان ارتباط برقرار کنیم.
درست مانند انسان، دستگاه های الکترونیکی نیز با یکدیگر ارتباط برقرار می کنند. بنابراین، آنها به مجموعه ای از قوانین و واژگان برای انتقال و دریافت اطلاعات از یکدیگر به طور فعال نیاز دارند.
پروتکل مجموعه ای استاندارد از قوانین است که ارتباط موفق بین دستگاه های الکترونیکی را تسهیل می کند. این مجموعه از قوانین پذیرفته شده و اجرا شده متقابل شامل دستورات مورد استفاده برای شروع ارسال و دریافت داده ها، انواع داده هایی که باید بین دستگاه ها منتقل شوند، روش تشخیص خطاها در داده ها، چگونگی تایید موفقیت آمیز انتقال داده ها و موارد دیگر می باشد.
به عنوان مثال، هنگامی که شما یک جستجوی ساده را با استفاده از یک مرورگر انجام می دهید، دو سیستم ضروری درگیر هستند – سرویس گیرنده HTTP و سرور HTTP.
مشتری که معمولاً به آن اشاره می شود مرورگر، می تواند یک برنامه پیچیده مانند Google Chrome یا Firefox باشد، اما می تواند به سادگی یک برنامه CLI نیز باشد. مشتری شما را ارسال می کند درخواست به سروری که درخواست های HTTP را پردازش می کند و a واکنش به مشتری. در مورد مرورگرها، پاسخ معمولاً یک HTML است page.
پایتون سرور HTTPS ساده مدول
هنگامی که به یک وب سرور سریع نیاز دارید، راه اندازی یک سرور در سطح تولید یک کار اضافی است.
پایتون SimpleHTTPServer
ماژول یک ابزار صرفه جویی در کار است که می توانید از آن برای تبدیل هر دایرکتوری در سیستم خود به یک وب سرور بدون عارضه استفاده کنید. این بسته بندی با یک سرور HTTP ساده ارائه می شود که استاندارد را ارائه می دهد GET
و HEAD
رسیدگی کنندگان درخواست
با یک سرور HTTP داخلی، نیازی به نصب یا پیکربندی چیزی برای راه اندازی وب سرور خود ندارید.
توجه داشته باشید: پایتون SimpleHTTPServer
ماژول در ادغام شد http.server
ماژول در پایتون 3. در طول این مقاله از نسخه پایتون 3 استفاده خواهیم کرد، اما اگر از پایتون 2 استفاده می کنید، می توانید swap بیرون http.server
برای SimpleHTTPServer
و در بیشتر موارد باید کار کند.
استفاده از خط فرمان
ساده ترین راه برای راه اندازی وب سروری که دایرکتوری را که در آن دستور اجرا می شود ارائه می دهد این است که به سادگی به دایرکتوری پروژه خود با استفاده از terminal و اجرا:
پایتون 2
$ python -m SimpleHTTPServer 8000
پایتون 3
$ python3 -m http.server 8000
با اجرای این دستور، می توانید از طریق مرورگر خود به فایل های موجود در فهرست خود دسترسی پیدا کنید localhost:8000
:
همانطور که می بینید، سرور یک UI دایرکتوری ساده ارائه می دهد که در آن می توانید به هر یک از فایل ها دسترسی داشته باشید. این ساده ترین راه برای ارائه مستقیم فایل ها به صورت محلی از طریق HTTP است.
استفاده پیش فرض پایتون
به هر دلیلی، اجرای این سرور از طریق خط فرمان ممکن است مناسب مورد استفاده ما نباشد. در مواقعی مانند این ما می توانیم به جای آن از سرور به طور مستقیم در کد خود با استفاده از SimpleHTTPRequestHandler
هدف – شی. اما ابتدا باید آن را با یک سرور سوکت راه اندازی کنیم.
در زیر پروتکل HTTP قرار دارند UDP (پروتکل دیتاگرام کاربر) یا TCP (پروتکل کنترل انتقال)، که پروتکل های انتقالی هستند که انتقال داده ها را از یک مکان شبکه به مکان دیگر انجام می دهند. از آنجایی که ما یک سرور HTTP را اجرا می کنیم، برنامه ما از پروتکل TCP از طریق a استفاده می کند آدرس سوکت TCP که حاوی یک آدرس IP و یک شماره پورت است. این را می توان با پایتون تنظیم کرد socketserver.TCPServer
، که در زیر پیاده سازی کرده ایم:
import http.server
import socketserver
PORT = 8000
handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), handler) as httpd:
print("Server started at localhost:" + str(PORT))
httpd.serve_forever()
توجه داشته باشید: کد با خطا خراب می شود AttributeError: __exit__
برای نسخه های پایتون < 3.6. زیرا در نسخه های قبلی socketserver.TCPServer
از استفاده با مدیران زمینه پشتیبانی نمی کند ( with
کلمه کلیدی). در این موارد باید تماس بگیرید server_close()
برای متوقف کردن سرور
به طور پیش فرض، SimpleHTTPRequestHandler
فایل ها را از دایرکتوری فعلی و زیرشاخه های مرتبط ارائه می دهد. همانطور که از نام آن پیداست، یک کنترل کننده ساده درخواست HTTP است. از آنجایی که سرور ساده ای است، فقط به شما امکان می دهد داده ها را بازیابی کنید و آنها را به سرور پست نکنید. و به همین دلیل فقط HTTP را پیاده سازی می کند GET
و HEAD
روش ها از طریق do_GET()
و do_HEAD()
.
پارامترها به TCPServer
نشان دهنده آدرس IP و شماره پورت است. با خالی گذاشتن آدرس IP، سرور به تمام آدرس های IP موجود گوش می دهد، در حالی که ما پورت را روی آن تنظیم کرده ایم 8000
. این بدان معنی است که در آن صورت قابل دسترسی خواهد بود روی localhost:8000
.
سرانجام، httpd.server_forever()
سرور را راه اندازی می کند، گوش می دهد و به درخواست های دریافتی مشتری پاسخ می دهد.
سرور را می توان به سادگی با اجرای فایل راه اندازی کرد:
$ python3 simple-server.py
و درست مانند استفاده از خط فرمان، اکنون می توانیم از طریق مرورگر وب خود به دایرکتوری دسترسی پیدا کنیم:
سفارشی کردن مسیرها
روش دیگری که می توانیم در پیش بگیریم این است که یک کلاس سفارشی بسازیم که گسترش یابد SimpleHTTPRequestHandler
و درخواست های ما را با برخی از قابلیت های سفارشی رسیدگی می کند. برای انجام این کار، ما خودمان را پیاده سازی می کنیم do_GET()
تابع.
اما قبل از رسیدن به آن، بیایید بگوییم که یک فایل HTML داریم که میخواهیم آن را ارائه کنیم. mywebpage.html
:
<!DOCTYPE html>
<html>
<head>
<title>Using Python's SimpleHTTPServer Module</title>
<style>
#rectangle {
height: 50px;
width: 100px;
background-color: #00f28f;
}
</style>
</head>
<body>
<h2>Rectangle served by SimpleHTTPServer</h2>
<div id="rectangle"></div>
</body>
</html>
به منظور خدمت به این HTML از مسیری که نیست /mywebpage.html
، می توانیم از کنترل کننده سفارشی خود برای ارائه آن استفاده کنیم روی هر مسیری که بخواهیم در این مثال ما فقط به آن خدمت می کنیم روی را root مسیر، /
:
import http.server
import socketserver
class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.path = 'mywebpage.html'
return http.server.SimpleHTTPRequestHandler.do_GET(self)
handler_object = MyHttpRequestHandler
PORT = 8000
my_server = socketserver.TCPServer(("", PORT), handler_object)
my_server.serve_forever()
باز هم، اجرای این اسکریپت به ما امکان می دهد از طریق مرورگر به آن دسترسی داشته باشیم:
اگرچه، سفارشیسازیهای بسیار بیشتری وجود دارد که میتوانیم با پاسخ از طریق آن انجام دهیم self
مرجع، که در بخش بعدی خواهیم دید.
برگرداندن HTML پویا
استفاده متداول از وب سرورها برای ارائه HTML تولید شده به صورت پویا است. اگرچه این فقط یک سرور بسیار ساده است، اما می تواند این کار را نیز انجام دهد. علاوه بر ارسال HTML پویا، میتوانیم کدهای وضعیت، سرصفحهها و غیره مختلفی را نیز تنظیم کنیم. در مثال زیر تعدادی هدر تنظیم کرده و HTML پویا را که با استفاده از پارامتر query تولید میشود، برمیگردانیم. name
:
import http.server
import socketserver
from urllib.parse import urlparse
from urllib.parse import parse_qs
class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
name = 'World'
query_components = parse_qs(urlparse(self.path).query)
if 'name' in query_components:
name = query_components("name")(0)
html = f"<html><head></head><body><h1>Hello {name}!</h1></body></html>"
self.wfile.write(bytes(html, "utf8"))
return
handler_object = MyHttpRequestHandler
PORT = 8000
my_server = socketserver.TCPServer(("", PORT), handler_object)
my_server.serve_forever()
و این کد را با URL اجرا کنید http://localhost:8000؟name=Billy
حاصل خواهد شد:
هر مقداری که برای name
سپس پارامتر query ظاهر می شود روی صفحه نمایش! شما حتی می توانید حذف کنید name
پارامتر پرس و جو کنید و ببینید چه اتفاقی می افتد.
همانطور که می بینید، ایجاد یک کنترل کننده درخواست سفارشی به ما این امکان را می دهد تا با تغییر پیاده سازی، پاسخ ها را تا جایی که می خواهیم دستکاری کنیم. do_GET
روش و ما چنین کنترلی روی پاسخ های خود با اجرای پیش فرض نداریم.
همین کار را می توان با روش HTTP HEAD (از طریق do_HEAD()
تابع)، اما از آنجایی که بسیار شبیه به روش GET است، آن را به عنوان تمرین به خواننده واگذار می کنیم.
نتیجه
پایتون در اختیار ما قرار می دهد SimpleHTTPServer
ماژول (یا http.server
در پایتون 3) که می تواند برای ارائه سریع و آسان فایل ها از یک فهرست محلی از طریق HTTP استفاده شود. این می تواند برای بسیاری از کارهای توسعه یا سایر وظایف داخلی استفاده شود، اما برای تولید در نظر گرفته نشده است.
این یک راه حل عالی برای استفاده محلی است زیرا وب سرورهایی مانند آپاچی، میمون، و اره منبت کاری اره مویی راه اندازی بسیار دشوارتر است و اغلب برای فعالیت های توسعه بیش از حد نیاز دارند.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-19 07:05:10