Máy chủ python http

Một lớp,

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
2, là một lớp con của
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
3. Nó tạo và lắng nghe tại ổ cắm HTTP, gửi các yêu cầu tới một trình xử lý. Mã để tạo và chạy máy chủ trông như thế này

def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()

lớp http. người phục vụ. HTTPServer(server_address , RequestHandlerClass)

Lớp này được xây dựng dựa trên lớp

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
4 bằng cách lưu trữ địa chỉ máy chủ dưới dạng các biến thể hiện có tên là
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
5 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
6. Trình xử lý có thể truy cập máy chủ, thường thông qua biến thể hiện
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
7 của trình xử lý

lớp http. người phục vụ. ThreadingHTTPServer(server_address , RequestHandlerClass)

Lớp này giống với HTTPServer nhưng sử dụng các luồng để xử lý các yêu cầu bằng cách sử dụng

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
8. Điều này rất hữu ích để xử lý các ổ cắm mở trước của trình duyệt web, trên đó
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
2 sẽ đợi vô thời hạn

Mới trong phiên bản 3. 7

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
2 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
01 phải được cung cấp một RequestHandlerClass khi khởi tạo, trong đó mô-đun này cung cấp ba biến thể khác nhau

lớp http. người phục vụ. BaseHTTPRequestHandler(yêu cầu , client_address , máy chủ)

Lớp này được sử dụng để xử lý các yêu cầu HTTP đến máy chủ. Bản thân nó không thể đáp ứng bất kỳ yêu cầu HTTP thực tế nào; . g. NHẬN hoặc ĐĂNG).

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
02 cung cấp một số biến lớp và thể hiện cũng như các phương thức để các lớp con sử dụng

Trình xử lý sẽ phân tích yêu cầu và các tiêu đề, sau đó gọi một phương thức dành riêng cho loại yêu cầu. Tên phương thức được xây dựng từ yêu cầu. Ví dụ: đối với phương thức yêu cầu

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
03, phương thức
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
04 sẽ được gọi mà không có đối số. Tất cả các thông tin liên quan được lưu trữ trong các biến thể hiện của trình xử lý. Các lớp con không cần ghi đè hoặc mở rộng phương thức
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
05

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
02 có các biến thể hiện sau

client_address

Chứa một bộ có dạng

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
07 đề cập đến địa chỉ của khách hàng

máy chủ

Chứa phiên bản máy chủ

close_connection

Boolean nên được đặt trước khi trả về

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
08, cho biết liệu có thể có yêu cầu khác hay không hoặc liệu kết nối có nên bị tắt hay không

dòng yêu cầu

Chứa biểu diễn chuỗi của dòng yêu cầu HTTP. CRLF kết thúc bị tước. Thuộc tính này phải được đặt bởi

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
08. Nếu không có dòng yêu cầu hợp lệ nào được xử lý, nó sẽ được đặt thành chuỗi trống

lệnh

Chứa lệnh (loại yêu cầu). Ví dụ,

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
90

đường dẫn

Chứa đường dẫn yêu cầu. Nếu có thành phần truy vấn của URL, thì

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
91 bao gồm truy vấn. Sử dụng thuật ngữ của RFC 3986,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
91 ở đây bao gồm
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
93 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
94

request_version

Chứa chuỗi phiên bản từ yêu cầu. Ví dụ,

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
95

tiêu đề

Giữ một thể hiện của lớp được chỉ định bởi biến lớp

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
96. Phiên bản này phân tích cú pháp và quản lý các tiêu đề trong yêu cầu HTTP. Hàm
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
97 từ
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
98 được sử dụng để phân tích cú pháp các tiêu đề và nó yêu cầu yêu cầu HTTP cung cấp tiêu đề kiểu RFC 2822 hợp lệ

rfile

Luồng đầu vào

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
99, sẵn sàng đọc từ đầu dữ liệu đầu vào tùy chọn

wfile

Chứa luồng đầu ra để viết phản hồi lại cho máy khách. Phải tuân thủ đúng giao thức HTTP khi ghi vào luồng này để đạt được sự tương tác thành công với các máy khách HTTP

Đã thay đổi trong phiên bản 3. 6. Đây là luồng

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
99.

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
02 có các thuộc tính sau

server_version

Chỉ định phiên bản phần mềm máy chủ. Bạn có thể muốn ghi đè lên điều này. Định dạng là nhiều chuỗi được phân tách bằng khoảng trắng, trong đó mỗi chuỗi có tên biểu mẫu[/version]. Ví dụ,

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
12

sys_version

Chứa phiên bản hệ thống Python, ở dạng có thể sử dụng được bằng phương thức

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
13 và biến lớp
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
14. Ví dụ,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
15

error_message_format

Chỉ định một chuỗi định dạng sẽ được sử dụng bởi phương pháp

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
16 để tạo phản hồi lỗi cho máy khách. Chuỗi được điền theo mặc định với các biến từ
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
17 dựa trên mã trạng thái được chuyển đến
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
16

error_content_type

Chỉ định tiêu đề Content-Type HTTP của các phản hồi lỗi được gửi tới máy khách. Giá trị mặc định là

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
19

protocol_version

Chỉ định phiên bản HTTP mà máy chủ tuân thủ. Nó được gửi dưới dạng phản hồi để cho khách hàng biết khả năng giao tiếp của máy chủ cho các yêu cầu trong tương lai. Nếu được đặt thành

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
90, máy chủ sẽ cho phép các kết nối liên tục HTTP; . Để tương thích ngược, cài đặt mặc định là
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
95

Lớp tin nhắn

Chỉ định một lớp giống như

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
94 để phân tích các tiêu đề HTTP. Thông thường, điều này không bị ghi đè và nó mặc định là
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
95

phản hồi

Thuộc tính này chứa ánh xạ các số nguyên mã lỗi thành các bộ hai phần tử chứa một thông báo ngắn và dài. Ví dụ,

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
96. Tin nhắn ngắn thường được sử dụng làm khóa tin nhắn trong phản hồi lỗi và tin nhắn dài làm khóa giải thích. Nó được sử dụng bởi các phương pháp
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
97 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
16

Một phiên bản

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
02 có các phương thức sau

xử lý()

Gọi

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
08 một lần (hoặc, nếu kết nối liên tục được bật, nhiều lần) để xử lý các yêu cầu HTTP đến. Bạn không bao giờ cần ghi đè lên nó;

handle_one_request()

Phương thức này sẽ phân tích cú pháp và gửi yêu cầu đến phương thức

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
01 thích hợp. Bạn không bao giờ cần phải ghi đè lên nó

handle_expect_100()

Khi một HTTP/1. 1 máy chủ tuân thủ nhận được tiêu đề yêu cầu

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
03, nó phản hồi lại bằng một
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
04 theo sau là tiêu đề
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
05. Phương pháp này có thể bị ghi đè để gây ra lỗi nếu máy chủ không muốn máy khách tiếp tục. cho e. g. máy chủ có thể chọn gửi
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
06 làm tiêu đề phản hồi và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
07

Mới trong phiên bản 3. 2

send_error( , thông báo=Không , giải thích=Không có)

Gửi và ghi lại một phản hồi lỗi hoàn chỉnh cho khách hàng. Mã số chỉ định mã lỗi HTTP, với thông báo dưới dạng mô tả lỗi tùy chọn, ngắn gọn, con người có thể đọc được. Đối số giải thích có thể được sử dụng để cung cấp thông tin chi tiết hơn về lỗi; . Thuộc tính

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
17 giữ các giá trị mặc định cho thông báo và giải thích giá trị đó sẽ được sử dụng nếu không có giá trị nào được cung cấp; . Nội dung sẽ trống nếu phương thức là HEAD hoặc mã phản hồi là một trong những điều sau đây.
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
91,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
92,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
93,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
94

Đã thay đổi trong phiên bản 3. 4. Phản hồi lỗi bao gồm tiêu đề Độ dài nội dung. Đã thêm đối số giải thích.

send_response( , thông báo=Không có)

Thêm tiêu đề phản hồi vào bộ đệm tiêu đề và ghi nhật ký yêu cầu được chấp nhận. Dòng phản hồi HTTP được ghi vào bộ đệm bên trong, theo sau là tiêu đề Máy chủ và Ngày. Các giá trị cho hai tiêu đề này lần lượt được chọn từ các phương thức

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
95 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
96. Nếu máy chủ không có ý định gửi bất kỳ tiêu đề nào khác bằng cách sử dụng phương thức
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
92, thì _____598 sẽ được theo sau bởi một cuộc gọi _______599

Đã thay đổi trong phiên bản 3. 3. Tiêu đề được lưu trữ vào bộ đệm bên trong và

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
99 cần được gọi một cách rõ ràng.

send_header(từ khóa , giá trị)

Thêm tiêu đề HTTP vào bộ đệm bên trong sẽ được ghi vào luồng đầu ra khi gọi

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
99 hoặc
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
222. từ khóa nên chỉ định từ khóa tiêu đề, với giá trị chỉ định giá trị của nó. Lưu ý rằng, sau khi các cuộc gọi send_header được thực hiện xong,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
99 PHẢI ĐƯỢC gọi để hoàn tất thao tác

Đã thay đổi trong phiên bản 3. 2. Tiêu đề được lưu trữ trong bộ đệm bên trong.

send_response_only( , thông báo=Không có)

Chỉ gửi tiêu đề phản hồi, được sử dụng cho các mục đích khi phản hồi

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
04 được máy chủ gửi tới máy khách. Các tiêu đề không được đệm và gửi trực tiếp luồng đầu ra. Nếu thông báo không được chỉ định, thông báo HTTP tương ứng với mã phản hồi sẽ được gửi

Mới trong phiên bản 3. 2

end_headers()

Thêm một dòng trống (biểu thị phần cuối của tiêu đề HTTP trong phản hồi) vào bộ đệm tiêu đề và gọi ____1222

Đã thay đổi trong phiên bản 3. 2. Tiêu đề đệm được ghi vào luồng đầu ra.

flush_headers()

Cuối cùng, gửi các tiêu đề đến luồng đầu ra và xóa bộ đệm tiêu đề bên trong

Mới trong phiên bản 3. 3

log_request(='-' , size='-')

Ghi nhật ký một yêu cầu được chấp nhận (thành công). mã phải chỉ định mã HTTP số được liên kết với phản hồi. Nếu có sẵn kích thước của phản hồi, thì nó sẽ được chuyển thành tham số kích thước

log_error(. )

Ghi nhật ký lỗi khi không thể thực hiện yêu cầu. Theo mặc định, nó chuyển thông báo tới

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
226, do đó, nó nhận các đối số giống nhau (định dạng và giá trị bổ sung)

log_message(định dạng , . )

Ghi một tin nhắn tùy ý vào

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
227. Điều này thường được ghi đè để tạo cơ chế ghi lỗi tùy chỉnh. Đối số định dạng là một chuỗi định dạng kiểu printf tiêu chuẩn, trong đó các đối số bổ sung cho
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
226 được áp dụng làm đầu vào cho định dạng. Địa chỉ IP của máy khách và ngày giờ hiện tại được thêm tiền tố vào mọi thông báo được ghi

version_string()

Trả về chuỗi phiên bản của phần mềm máy chủ. Đây là sự kết hợp của các thuộc tính

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
14 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
220

date_time_string(dấu thời gian=Không có)

Trả về ngày và giờ được cung cấp bởi dấu thời gian (phải là

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
221 hoặc ở định dạng được trả về bởi
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
222), được định dạng cho tiêu đề thư. Nếu dấu thời gian bị bỏ qua, nó sẽ sử dụng ngày và giờ hiện tại

Kết quả trông giống như

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
223

log_date_time_string()

Trả về ngày và giờ hiện tại, được định dạng để ghi nhật ký

address_string()

Trả về địa chỉ khách hàng

Đã thay đổi trong phiên bản 3. 3. Trước đây, việc tra cứu tên đã được thực hiện. Để tránh sự chậm trễ khi phân giải tên, giờ đây nó luôn trả về địa chỉ IP.

lớp http. người phục vụ. SimpleHTTPRequestHandler(yêu cầu , client_address , máy chủ , thư mục=Không có)

Lớp này phục vụ các tệp từ thư mục thư mục trở xuống hoặc thư mục hiện tại nếu thư mục không được cung cấp, ánh xạ trực tiếp cấu trúc thư mục tới các yêu cầu HTTP

Mới trong phiên bản 3. 7. Tham số thư mục.

Đã thay đổi trong phiên bản 3. 9. Tham số thư mục chấp nhận một đối tượng dạng đường dẫn .

Rất nhiều công việc, chẳng hạn như phân tích cú pháp yêu cầu, được thực hiện bởi lớp cơ sở

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
02. Lớp này thực hiện các hàm
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
225 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
226

Sau đây được định nghĩa là thuộc tính cấp lớp của

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
227

server_version

Đây sẽ là

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
228, trong đó
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
229 được xác định ở cấp độ mô-đun

extensions_map

Một hậu tố ánh xạ từ điển vào các loại MIME, chứa các phần ghi đè tùy chỉnh cho ánh xạ hệ thống mặc định. Ánh xạ được sử dụng không phân biệt chữ hoa chữ thường và do đó chỉ nên chứa các phím chữ thường

Đã thay đổi trong phiên bản 3. 9. Từ điển này không còn chứa các ánh xạ hệ thống mặc định nữa mà chỉ chứa các phần ghi đè.

Lớp

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
227 định nghĩa các phương thức sau

do_HEAD()

Phương pháp này phục vụ loại yêu cầu

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
01. nó gửi các tiêu đề mà nó sẽ gửi cho yêu cầu
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
02 tương đương. Xem phương pháp
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
225 để được giải thích đầy đủ hơn về các tiêu đề có thể có

do_GET()

Yêu cầu được ánh xạ tới một tệp cục bộ bằng cách diễn giải yêu cầu dưới dạng đường dẫn liên quan đến thư mục làm việc hiện tại

Nếu yêu cầu được ánh xạ tới một thư mục, thì thư mục đó sẽ được kiểm tra để tìm tệp có tên

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
04 hoặc
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
05 (theo thứ tự đó). Nếu tìm thấy, nội dung của tệp sẽ được trả lại; . Phương pháp này sử dụng
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
07 để quét thư mục và trả về phản hồi lỗi
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
08 nếu
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
09 không thành công

Nếu yêu cầu được ánh xạ tới một tệp, nó sẽ được mở. Bất kỳ ngoại lệ

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
10 nào khi mở tệp được yêu cầu đều được ánh xạ tới lỗi
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
08,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
12. Nếu có tiêu đề
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
13 trong yêu cầu và tệp không được sửa đổi sau thời gian này, phản hồi
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
14,
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
15 sẽ được gửi. Mặt khác, loại nội dung được đoán bằng cách gọi phương thức
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
16, phương thức này sử dụng biến extension_map và nội dung tệp được trả về

Tiêu đề

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
17 với loại nội dung đã đoán được xuất ra, theo sau là tiêu đề
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
18 với kích thước của tệp và tiêu đề
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
19 với thời gian sửa đổi của tệp

Sau đó, theo sau một dòng trống biểu thị phần cuối của tiêu đề và sau đó nội dung của tệp được xuất ra. Nếu loại MIME của tệp bắt đầu bằng

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
20 thì tệp được mở ở chế độ văn bản;

Ví dụ về cách sử dụng, hãy xem phần triển khai hàm

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
21 trong Lib/http/server. py

Đã thay đổi trong phiên bản 3. 7. Hỗ trợ tiêu đề

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
13.

Lớp

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
227 có thể được sử dụng theo cách sau để tạo một máy chủ web rất cơ bản phục vụ các tệp liên quan đến thư mục hiện tại

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
22 cũng có thể được gọi trực tiếp bằng công tắc
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
25 của trình thông dịch. Tương tự như ví dụ trước, điều này phục vụ các tệp liên quan đến thư mục hiện tại

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
0

Máy chủ lắng nghe cổng 8000 theo mặc định. Giá trị mặc định có thể được ghi đè bằng cách chuyển số cổng mong muốn làm đối số

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
9

Theo mặc định, máy chủ tự liên kết với tất cả các giao diện. Tùy chọn

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
26 chỉ định một địa chỉ cụ thể mà nó sẽ liên kết. Cả địa chỉ IPv4 và IPv6 đều được hỗ trợ. Ví dụ: lệnh sau khiến máy chủ chỉ liên kết với localhost

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
1

Mới trong phiên bản 3. 4. ______027 đối số đã được giới thiệu.

Mới trong phiên bản 3. 8. ____027 đối số được nâng cao để hỗ trợ IPv6

Theo mặc định, máy chủ sử dụng thư mục hiện tại. Tùy chọn

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
29 chỉ định một thư mục mà nó sẽ phục vụ các tệp. Ví dụ: lệnh sau sử dụng một thư mục cụ thể

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
9

Mới trong phiên bản 3. 7. ______030 đối số đã được giới thiệu.

Theo mặc định, máy chủ tuân theo HTTP/1. 0. Tùy chọn

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
31 chỉ định phiên bản HTTP mà máy chủ tuân thủ. Ví dụ: lệnh sau chạy HTTP/1. 1 máy chủ phù hợp

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
0

Mới trong phiên bản 3. 11. ______032 đối số đã được giới thiệu.

lớp http. người phục vụ. CGIHTTPRequestHandler(yêu cầu , client_address , máy chủ)

Lớp này được sử dụng để phục vụ tệp hoặc đầu ra của tập lệnh CGI từ thư mục hiện tại trở xuống. Lưu ý rằng ánh xạ cấu trúc phân cấp HTTP sang cấu trúc thư mục cục bộ chính xác như trong

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
227

Ghi chú

Tập lệnh CGI chạy bởi lớp

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
34 không thể thực thi chuyển hướng (mã HTTP 302), vì mã 200 (đầu ra tập lệnh theo sau) được gửi trước khi thực thi tập lệnh CGI. Điều này làm mất trước mã trạng thái

Tuy nhiên, lớp sẽ chạy tập lệnh CGI, thay vì phục vụ nó dưới dạng tệp, nếu nó đoán đó là tập lệnh CGI. Chỉ CGI dựa trên thư mục được sử dụng — cấu hình máy chủ phổ biến khác là coi các tiện ích mở rộng đặc biệt là biểu thị các tập lệnh CGI

Các hàm

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
225 và
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
226 được sửa đổi để chạy tập lệnh CGI và cung cấp đầu ra, thay vì cung cấp tệp, nếu yêu cầu dẫn đến một nơi nào đó bên dưới đường dẫn
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
37

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
34 định nghĩa thành viên dữ liệu sau

cgi_directories

Điều này mặc định là

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
39 và mô tả các thư mục được coi là chứa các tập lệnh CGI

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
34 định nghĩa phương thức sau

do_POST()

Phương pháp này phục vụ loại yêu cầu

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
41, chỉ được phép cho các tập lệnh CGI. Lỗi 501, “Chỉ có thể POST tới các tập lệnh CGI”, được xuất ra khi cố gắng POST tới một url không phải CGI

Lưu ý rằng các tập lệnh CGI sẽ được chạy với UID của người dùng, vì lý do bảo mật. Các sự cố với tập lệnh CGI sẽ được chuyển thành lỗi 403

Có thể bật

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
34 trong dòng lệnh bằng cách chuyển tùy chọn
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
43

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
9

Cân nhắc về Bảo mật¶

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
227 sẽ theo các liên kết tượng trưng khi xử lý các yêu cầu, điều này giúp các tệp bên ngoài thư mục được chỉ định có thể được phục vụ

Các phiên bản trước của Python không xóa các ký tự điều khiển khỏi thông báo nhật ký được gửi tới thiết bị lỗi chuẩn từ

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
45 hoặc triển khai
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
02
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
47 mặc định. Điều này có thể cho phép các máy khách từ xa kết nối với máy chủ của bạn gửi các mã kiểm soát bất chính đến thiết bị đầu cuối của bạn