Xác thực máy chủ Python http

Xác thực là quá trình xác định xem yêu cầu có đến từ người dùng hợp lệ có các đặc quyền cần thiết để sử dụng hệ thống hay không. Trong thế giới mạng máy tính, đây là một yêu cầu rất quan trọng vì nhiều hệ thống tiếp tục tương tác với nhau và cơ chế phù hợp cần đảm bảo rằng chỉ những tương tác hợp lệ xảy ra giữa các chương trình này

Các yêu cầu tên mô-đun python có tính năng tích hợp để gọi các API khác nhau được cung cấp bởi các ứng dụng web phục vụ cùng với thông tin đăng nhập của người dùng. Những thông tin đăng nhập này phải được nhúng trong chương trình gọi điện. Nếu API xác minh thành công thì đăng nhập hợp lệ sẽ xảy ra

Yêu cầu cài đặt

Chúng tôi cài đặt mô-đun python được yêu cầu có tên là yêu cầu để chạy chương trình xác thực

pip install requests

Xác thực với Github

Dưới đây chúng tôi thấy một cơ chế xác thực đơn giản chỉ liên quan đến tên người dùng và mật khẩu. Phản hồi thành công cho biết đăng nhập hợp lệ

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r

Khi chúng tôi chạy chương trình trên, chúng tôi nhận được đầu ra sau -

Xác thực với Twitter

Chúng tôi cũng có thể chạy một chương trình để sử dụng api của twitter và đăng nhập thành công bằng cách sử dụng đoạn mã sau. Chúng tôi sử dụng phương thức OAuth1 có sẵn trong mô-đun yêu cầu để xử lý các tham số mà Twitter API yêu cầu. Như chúng ta có thể thấy mô-đun yêu cầu có khả năng xử lý cơ chế xác thực phức tạp hơn liên quan đến khóa và mã thông báo thay vì chỉ cơ chế tên người dùng và mật khẩu

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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
21 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
22 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
23, phương thức
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
24 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
25

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
22 có các biến thể hiện sau

client_address

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

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
27 đề 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
28, 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
28. 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[]
10

đườ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[]
11 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[]
11 ở đâ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[]
13 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[]
14

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[]
15

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[]
16. 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[]
17 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[]
18 đượ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[]
19, 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[]
19.

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
22 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[]
32

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[]
33 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[]
34. 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[]
35

error_message_format

Chỉ định một chuỗi định dạng nên đượ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[]
36 để 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[]
37 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[]
36

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[]
39

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

def run[server_class=HTTPServer, handler_class=BaseHTTPRequestHandler]:
    server_address = ['', 8000]
    httpd = server_class[server_address, handler_class]
    httpd.serve_forever[]
10, 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[]
15

Lớp tin nhắn

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

def run[server_class=HTTPServer, handler_class=BaseHTTPRequestHandler]:
    server_address = ['', 8000]
    httpd = server_class[server_address, handler_class]
    httpd.serve_forever[]
14 để 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à
def run[server_class=HTTPServer, handler_class=BaseHTTPRequestHandler]:
    server_address = ['', 8000]
    httpd = server_class[server_address, handler_class]
    httpd.serve_forever[]
15

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ụ,

def run[server_class=HTTPServer, handler_class=BaseHTTPRequestHandler]:
    server_address = ['', 8000]
    httpd = server_class[server_address, handler_class]
    httpd.serve_forever[]
16. 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
def run[server_class=HTTPServer, handler_class=BaseHTTPRequestHandler]:
    server_address = ['', 8000]
    httpd = server_class[server_address, handler_class]
    httpd.serve_forever[]
17 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[]
36

Một phiên bản

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
22 có các phương thức sau

xử lý[]

Gọi

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
28 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[]
21 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[]
23, 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[]
24 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[]
25. 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[]
26 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[]
27

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[]
37 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[]
11,
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,
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,
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

Đã 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 được chọn tương ứng 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[]
15 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. Nếu máy chủ không có ý định gửi bất kỳ tiêu đề nào khác bằng phương pháp
def run[server_class=HTTPServer, handler_class=BaseHTTPRequestHandler]:
    server_address = ['', 8000]
    httpd = server_class[server_address, handler_class]
    httpd.serve_forever[]
12, thì ____618 sẽ được theo sau bởi một cuộc gọi ____619

Đã 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[]
19 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[]
19 hoặc
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
242. 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,
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 PHẢI ĐƯỢC gọi để hoàn thành 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[]
24 đượ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 ____1242

Đã 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
246, 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

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
247. Đ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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
246 đượ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[]
34 và
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
240

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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
241 hoặc ở định dạng được trả về bởi
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
242], đượ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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
243

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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
22. Lớp này thực hiện các hàm
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
245 và
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
246

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

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
247

server_version

Đây sẽ là

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
248, trong đó
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
249 đượ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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
247 đị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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
245 để đượ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 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
247 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
24 cũng có thể được gọi trực tiếp bằng cách sử dụ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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
2

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[]
1

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[]
3

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

Mới trong phiên bản 3. 8. ____227 đố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ể

def run[server_class=HTTPServer, handler_class=BaseHTTPRequestHandler]:
    server_address = ['', 8000]
    httpd = server_class[server_address, handler_class]
    httpd.serve_forever[]
1

Mới trong phiên bản 3. 7. ______230 đố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[]
2

Mới trong phiên bản 3. 11. ______232 đố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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
247

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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
245 và
import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
246 đượ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[]
1

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

import requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
247 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 requests 
r = requests.get['//api.github.com/user', auth=['user', 'pass']]
print r
22
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

Sự khác biệt giữa BaseHTTPServer và SimpleHTTPServer trong python là gì?

BaseHTTPServer là một thư viện máy chủ HTTP. Nó hiểu giao thức HTTP và để mã của bạn xử lý các yêu cầu. Bản thân nó không có bất kỳ "logic" nào. SimpleHTTPServer được xây dựng trên BaseHTTPServer và xử lý các yêu cầu theo cách tương tự như cách mà các máy chủ HTTP thông thường thực hiện, tôi. e. phục vụ các tập tin từ hệ thống tập tin

Làm cách nào để cài đặt máy chủ HTTP python?

Chạy máy chủ HTTP cục bộ đơn giản .
Cài đặt Python. .
Mở dấu nhắc lệnh của bạn [Windows]/thiết bị đầu cuối [macOS/Linux]. .
Điều này sẽ trả về một số phiên bản. .
Nhập lệnh để khởi động máy chủ trong thư mục đó. .
Theo mặc định, điều này sẽ chạy nội dung của thư mục trên máy chủ web cục bộ, trên cổng 8000

Làm cách nào để triển khai ủy quyền trong python?

Để đạt được xác thực này, thông thường, một cung cấp dữ liệu xác thực thông qua tiêu đề Ủy quyền hoặc tiêu đề tùy chỉnh do máy chủ xác định . Thay thế “user” và “pass” bằng tên người dùng và mật khẩu của bạn. Nó sẽ xác thực yêu cầu và trả về phản hồi 200 nếu không nó sẽ trả về lỗi 403.

Cổng mặc định cho máy chủ HTTP python là gì?

Bạn có thể chạy máy chủ python http trên bất kỳ cổng nào, cổng mặc định là 8000 . Cố gắng sử dụng số cổng lớn hơn 1024 để tránh xung đột. Sau đó mở trình duyệt yêu thích của bạn và gõ localhost. 9000.

Chủ Đề