Từ đầu series đến giờ chúng ta đều sử dụng python trên giao diện comandline, chắc các bạn đã chán rồi đúng không? Hôm nay chúng ta sẽ đổi gió và thử khởi tạo một con server http bằng Python nhé!
1, Tạo một con server đơn giản.
Đầu tiên để có thể khởi tạo được một con server thì bạn cần import module htttp.server
của Python vào trong chương trình:
from http.server import BaseHTTPRequestHandler, HTTPServer
Và ở đây chúng ta cần sử dụng đến 2 object BaseHTTPRequestHandler
, HTTPServer
trong module http.server.
Tiếp đó chúng ta sẽ khai báo một class kế thừa từ class BaseHTTPRequestHandler của Python. Và khai báo thêm một phương thức do_GET() để xử lý khi có get Request gửi lên.
from http.server import BaseHTTPRequestHandler, HTTPServer
# HTTPRequestHandler class
class SimpleHTTP(BaseHTTPRequestHandler):
# Nhận GET request gửi lên.
def do_GET(self):
# SET http status trả về
self.send_response(200)
# Thiết lập header trả về
self.send_header('Content-type','text/html')
self.end_headers()
# Data
message = "Hoc Lap Trinh Tai Toidicode.com"
# Write data dưới dạng utf8
self.wfile.write(bytes(message, "utf8"))
return
Ngoài ra thì trong lớp BaseHTTPRequestHandler
còn hỗ trợ chúng ta một số các thuộc tính và phương thức như sau:
Field | Mô Tả |
server_version |
Trả về version của server. |
do_HEAD() |
Phương thức này cấu hình thông số head trả về. |
do_GET() |
Phương thức xử lý khi có GET request gửi lên. |
do_POST() |
Phương thức xử lý khi có POST request gửi lên. |
client_address |
Thuộc tính này trả về tuple chứa host và port của server đang chạy. |
command |
Thuộc tính này trả về kiểu của request gửi lên. |
path |
Thuộc tính này trả về path của request gửi lên. |
request_version |
Thuộc tính này trả về version của request hiện tại. |
headers |
Thuộc tính này trả về tất tất cả những gì mà request gửi lên. |
... | ..... Các bạn có thể xem thêm tại đây. |
Sau khi đã cấu hình xong thông số và các hành động xử lý. Giờ chúng ta sẽ sử dụng đến đối tượng HTTPServer
để khởi chạy server.
from http.server import BaseHTTPRequestHandler, HTTPServer
# HTTPRequestHandler class
class SimpleHTTP(BaseHTTPRequestHandler):
# Nhận GET request gửi lên.
def do_GET(self):
# SET http status trả về
self.send_response(200)
# Thiết lập header trả về
self.send_header('Content-type','text/html')
self.end_headers()
# Data
message = "Hoc Lap Trinh Tai Toidicode.com"
# Write data dưới dạng utf8
self.wfile.write(bytes(message, "utf8"))
return
# cấu hình host và cổng port cho server
server_address = ('127.0.0.1', 8000)
# Khởi tạo server với thông số cấu hình ở trên.
httpd = HTTPServer(server_address, SimpleHTTP)
# Tiến hành chạy server
httpd.serve_forever()
Và bây giờ các bạn sử dụng comand line để chạy file chương trình và truy cập vào host và port đã cấu hình (của mình sẽ là 127.0.0.1:8000 tương đương với localhost:8000).
Kết quả thu được.
2, Lời kết.
Qua phần này mọi người về có thể tự thực hành thêm các chức năng khác cho server. Ví dụ như truy cập vào contact.html
thì hiện ra contact, about.html
thì hiện ra about,... (dùng thuộc tính path để làm). Hoặc viết nội dung ra file text rồi từ đó sử dụng đọc ghi file trong Python để render ra HTML.
Đăng ký nhận tin.
Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!
tác giả cho thêm vid dụ về các hàm chúc năng không.. mình không biết làm
Ngô văn việt
6 năm trước
làm sao đề thuộc hết các hàm trong một module z ad, với lại trên đó mk ko hiểu lắm về GET và POST lắm????
lmq
6 năm trước