Mô-đun này không hoạt động hoặc không khả dụng trên nền tảng WebAssugging
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 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[]1. Xem để biết thêm thông tin
Một lớp, , là một lớp con. 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 xây dựng trên lớp 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 đối tượ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[]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. Đ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 đó sẽ chờ vô thời hạn
Mới trong phiên bản 3. 7
và 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]. cung cấp một số biến lớp và thể hiện, và các phương thức để sử dụng bởi các lớp con
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
python -m http.server3, phương thức
python -m http.server4 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
python -m http.server5
có các biến ví dụ sau
client_addressChứa một bộ có dạng
python -m http.server7 đề cập đến địa chỉ của khách hàngngười phục vụ
Chứa phiên bản máy chủ
đóng kết nốiBoolean nên được đặt trước khi trả về, 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ầuChứ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 nên được thiết lập bởi. 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
chỉ huyChứa lệnh [loại yêu cầu]. Ví dụ,
python -m http.server 90000đườ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ì
python -m http.server 90001 bao gồm truy vấn. Sử dụng thuật ngữ của RFC 3986,
python -m http.server 90001 ở đây bao gồm
python -m http.server 90003 và
python -m http.server 90004request_version
Chứa chuỗi phiên bản từ yêu cầu. Ví dụ,
python -m http.server 90005tiêu đề
Giữ một thể hiện của lớp được chỉ định bởi biến lớp. 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 from đượ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ệ
rfileLuồng đầu vào, sẵn sàng để đọc từ đầu dữ liệu đầu vào tùy chọn
wfileChứ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à một luồng.
có các thuộc tính sau
server_versionChỉ đị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ụ,
python -m http.server --bind 127.0.0.12sys_version
Chứa phiên bản hệ thống Python, ở dạng có thể sử dụng được bởi phương thức và biến lớp. Ví dụ,
python -m http.server --bind 127.0.0.15error_message_format
Chỉ định một chuỗi định dạng sẽ được sử dụng theo phương thức để 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ừ dựa trên mã trạng thái được chuyển đến
error_content_typeChỉ đị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à
python -m http.server --bind 127.0.0.19giao thức_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
python -m http.server --directory /tmp/0, 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à
python -m http.server 90005tin nhắnlớp
Chỉ định một lớp -like để 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à
python -m http.server --directory /tmp/5phả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ụ,
python -m http.server --directory /tmp/6. 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 và các phương pháp
Một thể hiện có các phương pháp sau
xử lý[]Gọi 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
python -m http.server --protocol HTTP/1.11 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
python -m http.server --protocol HTTP/1.13 nó phản hồi lại bằng một tiêu đề
python -m http.server --protocol HTTP/1.14 theo sau bởi tiêu đề
python -m http.server --protocol HTTP/1.15. 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
python -m http.server --protocol HTTP/1.16 làm tiêu đề phản hồi và
python -m http.server --protocol HTTP/1.17
Mới trong phiên bản 3. 2
send_error[mã , 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 giữ các giá trị mặc định cho thông báo và giải thích rằng 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.
python -m http.server --cgi1,
python -m http.server --cgi2,
python -m http.server --cgi3,
python -m http.server --cgi4
Đã 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[mã , 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 được chọn tương ứng từ các phương thức và. Nếu máy chủ không có ý định gửi bất kỳ tiêu đề nào khác bằng phương thức này, thì nên theo sau một cuộc gọi
Đã thay đổi trong phiên bản 3. 3. Tiêu đề được lưu vào bộ đệm bên trong và cần được gọi 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 hoặc được gọi. 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 gọi send_header xong, 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[mã , 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
python -m http.server --protocol HTTP/1.14 đượ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
Đã 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[mã='-' , 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 , 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 nhật ký một thông báo tùy ý vào http.server
7. Đ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 đượ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
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 và
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à http.server
1 hoặc ở định dạng được trả về bởi ], đượ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ư http.server
3
Trả về ngày và giờ hiện tại, được định dạng để ghi nhật ký
chuỗi_địa_chỉ[]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.
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ở. Lớp này thực hiện các chức năng và
Sau đây được định nghĩa là thuộc tính cấp lớp của
server_versionĐây sẽ là http.server
8, trong đó http.server
9 được xác định ở cấp độ mô-đun
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 đị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ó sẽ 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 để được giải thích đầy đủ hơn về các tiêu đề có thể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 để 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 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ệ nào trong việc 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, tiếp theo 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 này 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[]
cũng có thể được gọi trực tiếp bằng cách sử dụng công tắc 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
python -m http.server
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ố
python -m http.server 9000
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
python -m http.server --bind 127.0.0.1
Mới trong phiên bản 3. 4. ______0_______27 đối số đã được đưa ra.
Mới trong phiên bản 3. 8. ______0_______27 đố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ể
python -m http.server --directory /tmp/
Mới trong phiên bản 3. 7. ______0_______30 đố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
python -m http.server --protocol HTTP/1.1
Mới trong phiên bản 3. 11. ______0_______32 đối số đã được đưa ra.
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
Ghi chú
Tập lệnh CGI do lớp chạy 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 http.server
5 và http.server
6 đượ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
Đị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à có chứa các tập lệnh CGI
Đị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ể được kích hoạt 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
python -m http.server --cgi
Cân nhắc về Bảo mật
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 các 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 mặc định 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[]47. Đ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