http.client --- ứng dụng khách giao thức HTTP

Source code: Lib/http/client.py


Mô-đun này xác định các lớp triển khai phía máy khách của giao thức HTTP và HTTPS. Nó thường không được sử dụng trực tiếp --- mô-đun urllib.request sử dụng nó để xử lý các URL sử dụng HTTP và HTTPS.

Xem thêm

Zz000zz được khuyên dùng cho giao diện máy khách HTTP cấp cao hơn.

Ghi chú

Hỗ trợ HTTPS chỉ khả dụng nếu Python được biên dịch với sự hỗ trợ SSL (thông qua mô-đun ssl).

sẵn có: not WASI.

Mô-đun này không hoạt động hoặc không có trên WebAssembly. Xem Nền tảng WebAssugging để biết thêm thông tin.

Mô-đun này cung cấp các lớp sau:

class http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None, blocksize=8192)

Một phiên bản HTTPConnection đại diện cho một giao dịch với máy chủ HTTP. Nó phải được khởi tạo bằng cách chuyển cho nó một máy chủ và số cổng tùy chọn. Nếu không có số cổng nào được chuyển, cổng đó sẽ được trích xuất từ ​​chuỗi máy chủ nếu nó có dạng host:port, nếu không thì cổng HTTP mặc định (80) sẽ được sử dụng. Nếu tham số timeout tùy chọn được cung cấp, các hoạt động chặn (như nỗ lực kết nối) sẽ hết thời gian chờ sau nhiều giây đó (nếu không được cung cấp, cài đặt thời gian chờ mặc định chung sẽ được sử dụng). Tham số source_address tùy chọn có thể là một bộ (máy chủ, cổng) để sử dụng làm địa chỉ nguồn mà kết nối HTTP được tạo từ đó. Tham số blocksize tùy chọn đặt kích thước bộ đệm tính bằng byte để gửi nội dung thư giống như tệp.

Ví dụ: tất cả các lệnh gọi sau đây đều tạo các phiên bản kết nối với máy chủ trên cùng một máy chủ và cổng

>>> h1 = http.client.HTTPConnection('www.python.org')
>>> h2 = http.client.HTTPConnection('www.python.org:80')
>>> h3 = http.client.HTTPConnection('www.python.org', 80)
>>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)

Thay đổi trong phiên bản 3.2: source_address đã được thêm vào.

Thay đổi trong phiên bản 3.4: Tham số strict đã bị xóa. "Phản hồi đơn giản" kiểu HTTP 0.9 không còn được hỗ trợ.

Thay đổi trong phiên bản 3.7: tham số blocksize đã được thêm vào.

class http.client.HTTPSConnection(host, port=None, *, [timeout, ]source_address=None, context=None, blocksize=8192)

Một lớp con của HTTPConnection sử dụng SSL để liên lạc với các máy chủ bảo mật. Cổng mặc định là 443. Nếu context được chỉ định, thì đó phải là phiên bản ssl.SSLContext mô tả các tùy chọn SSL khác nhau.

Vui lòng đọc Cân nhắc về bảo mật để biết thêm thông tin về các phương pháp hay nhất.

Thay đổi trong phiên bản 3.2: source_address, contextcheck_hostname đã được thêm vào.

Thay đổi trong phiên bản 3.2: Lớp này hiện hỗ trợ máy chủ ảo HTTPS nếu có thể (nghĩa là nếu ssl.HAS_SNI là đúng).

Thay đổi trong phiên bản 3.4: Tham số strict đã bị xóa. "Phản hồi đơn giản" kiểu HTTP 0.9 không còn được hỗ trợ.

Thay đổi trong phiên bản 3.4.3: Lớp này hiện thực hiện tất cả các kiểm tra chứng chỉ và tên máy chủ cần thiết theo mặc định. Để hoàn nguyên về hành vi ssl._create_unverified_context() trước đó, chưa được xác minh, có thể được chuyển tới tham số context.

Thay đổi trong phiên bản 3.8: Lớp này hiện kích hoạt TLS 1.3 ssl.SSLContext.post_handshake_auth cho context mặc định hoặc khi cert_file được chuyển bằng context tùy chỉnh.

Thay đổi trong phiên bản 3.10: Lớp này hiện gửi phần mở rộng ALPN với chỉ báo giao thức http/1.1 khi không có context nào được cung cấp. Zz003zz tùy chỉnh nên đặt giao thức ALPN với set_alpn_protocols().

Thay đổi trong phiên bản 3.12: Các tham số key_file, cert_filecheck_hostname không được dùng nữa đã bị xóa.

class http.client.HTTPResponse(sock, debuglevel=0, method=None, url=None)

Lớp có phiên bản được trả về khi kết nối thành công. Không được người dùng trực tiếp khởi tạo.

Thay đổi trong phiên bản 3.4: Tham số strict đã bị xóa. Kiểu "Phản hồi đơn giản" kiểu HTTP 0.9 không còn được hỗ trợ.

Mô-đun này cung cấp chức năng sau:

http.client.parse_headers(fp)

Phân tích các tiêu đề từ một con trỏ tệp fp biểu thị yêu cầu/phản hồi HTTP. Tệp phải là trình đọc BufferedIOBase (tức là không phải văn bản) và phải cung cấp tiêu đề kiểu RFC 5322 hợp lệ.

Hàm này trả về một phiên bản của http.client.HTTPMessage chứa các trường tiêu đề nhưng không có tải trọng (giống như HTTPResponse.msghttp.server.BaseHTTPRequestHandler.headers). Sau khi quay lại, con trỏ tệp fp đã sẵn sàng để đọc phần thân HTTP.

Ghi chú

parse_headers() không phân tích dòng bắt đầu của tin nhắn HTTP; nó chỉ phân tích các dòng Name: value. Tệp phải sẵn sàng để đọc các dòng trường này, vì vậy dòng đầu tiên phải được sử dụng trước khi gọi hàm.

Các trường hợp ngoại lệ sau đây được nêu ra khi thích hợp:

exception http.client.HTTPException

Lớp cơ sở của các ngoại lệ khác trong mô-đun này. Nó là một lớp con của Exception.

exception http.client.NotConnected

Một lớp con của HTTPException.

exception http.client.InvalidURL

Một lớp con của HTTPException, được nâng lên nếu một cổng được cung cấp và không phải là số hoặc trống.

exception http.client.UnknownProtocol

Một lớp con của HTTPException.

exception http.client.UnknownTransferEncoding

Một lớp con của HTTPException.

exception http.client.UnimplementedFileMode

Một lớp con của HTTPException.

exception http.client.IncompleteRead

Một lớp con của HTTPException.

exception http.client.ImproperConnectionState

Một lớp con của HTTPException.

exception http.client.CannotSendRequest

Một lớp con của ImproperConnectionState.

exception http.client.CannotSendHeader

Một lớp con của ImproperConnectionState.

exception http.client.ResponseNotReady

Một lớp con của ImproperConnectionState.

exception http.client.BadStatusLine

Một lớp con của HTTPException. Xảy ra nếu máy chủ phản hồi với mã trạng thái HTTP mà chúng tôi không hiểu.

exception http.client.LineTooLong

Một lớp con của HTTPException. Tăng lên nếu nhận được một dòng quá dài trong giao thức HTTP từ máy chủ.

exception http.client.RemoteDisconnected

Một lớp con của ConnectionResetErrorBadStatusLine. Được tăng lên bởi HTTPConnection.getresponse() khi nỗ lực đọc phản hồi dẫn đến không có dữ liệu nào được đọc từ kết nối, cho biết rằng đầu từ xa đã đóng kết nối.

Added in version 3.5: Trước đây, BadStatusLine('') đã được nâng lên.

Các hằng số được xác định trong mô-đun này là:

http.client.HTTP_PORT

Cổng mặc định cho giao thức HTTP (luôn là 80).

http.client.HTTPS_PORT

Cổng mặc định cho giao thức HTTPS (luôn là 443).

http.client.responses

Từ điển này ánh xạ mã trạng thái HTTP 1.1 tới tên W3C.

Ví dụ: http.client.responses[http.client.NOT_FOUND]'Not Found'.

Xem mã trạng thái HTTP để biết danh sách mã trạng thái HTTP có sẵn trong mô-đun này dưới dạng hằng số.

Đối tượng kết nối HTTP

Các phiên bản HTTPConnection có các phương thức sau:

HTTPConnection.request(method, url, body=None, headers={}, *, encode_chunked=False)

Điều này sẽ gửi yêu cầu đến máy chủ bằng phương thức yêu cầu HTTP method và yêu cầu URI url. url được cung cấp phải là đường dẫn tuyệt đối tuân thủ RFC 2616 §5.1.2 (trừ khi kết nối với máy chủ proxy HTTP hoặc sử dụng phương thức OPTIONS hoặc CONNECT).

Nếu body được chỉ định, dữ liệu được chỉ định sẽ được gửi sau khi tiêu đề hoàn tất. Nó có thể là str, bytes-like object, file object mở hoặc có thể lặp lại bytes. Nếu body là một chuỗi thì nó được mã hóa thành ISO-8859-1, mặc định cho HTTP. Nếu đó là một đối tượng giống byte, thì các byte sẽ được gửi nguyên trạng. Nếu là file object, nội dung của tệp sẽ được gửi; đối tượng tệp này phải hỗ trợ ít nhất phương thức read(). Nếu đối tượng tệp là một phiên bản của io.TextIOBase, dữ liệu được trả về bởi phương thức read() sẽ được mã hóa thành ISO-8859-1, nếu không thì dữ liệu được trả về bởi read() sẽ được gửi nguyên trạng. Nếu body là một iterable, các phần tử của iterable sẽ được gửi nguyên trạng cho đến khi iterable hết.

Đối số headers phải là ánh xạ của các tiêu đề HTTP bổ sung để gửi cùng với yêu cầu. Phải cung cấp Host header để tuân thủ RFC 2616 §5.1.2 (trừ khi kết nối với máy chủ proxy HTTP hoặc sử dụng phương thức OPTIONS hoặc CONNECT).

Nếu headers không chứa Độ dài nội dung cũng như Mã hóa truyền tải nhưng có nội dung yêu cầu thì một trong các trường tiêu đề đó sẽ tự động được thêm vào. Nếu bodyNone, thì tiêu đề Độ dài nội dung được đặt thành 0 cho các phương thức yêu cầu nội dung (PUT, POSTPATCH). Nếu body là một chuỗi hoặc một đối tượng giống byte không phải là file, thì tiêu đề Độ dài nội dung được đặt thành độ dài của nó. Bất kỳ loại body nào khác (nói chung là tệp và các lần lặp) sẽ được mã hóa theo đoạn và tiêu đề Mã hóa chuyển sẽ tự động được đặt thay vì Độ dài nội dung.

Đối số encode_chunked chỉ có liên quan nếu Mã hóa truyền được chỉ định trong headers. Nếu encode_chunkedFalse, đối tượng HTTPConnection giả định rằng tất cả mã hóa đều được mã gọi xử lý. Nếu là True, phần thân sẽ được mã hóa từng đoạn.

Ví dụ: để thực hiện yêu cầu GET tới https://python.go-mizu.dev/:

>>> nhập http.client
>>> máy chủ = "docs.python.org"
>>> conn = http.client.HTTPSConnection(host)
>>> conn.request("GET", "/3/", headers={"Host": hosting})
>>> phản hồi = conn.getresponse()
>>> print(response.status, reply.reason)
200 được rồi

Ghi chú

Mã hóa truyền chunked đã được thêm vào giao thức HTTP phiên bản 1.1. Trừ khi máy chủ HTTP được biết là xử lý HTTP 1.1, người gọi phải chỉ định Độ dài nội dung hoặc phải chuyển một đối tượng str hoặc đối tượng giống byte không phải là tệp dưới dạng biểu diễn nội dung.

Ghi chú

Lưu ý rằng bạn phải đọc toàn bộ phản hồi hoặc gọi close() nếu getresponse() đưa ra ngoại lệ không phải ConnectionError trước khi bạn có thể gửi yêu cầu mới đến máy chủ.

Thay đổi trong phiên bản 3.2: body bây giờ có thể lặp lại được.

Thay đổi trong phiên bản 3.6: Nếu cả Độ dài nội dung và Mã hóa truyền đều không được đặt trong headers, thì tệp và các đối tượng body có thể lặp lại hiện được mã hóa theo khối. Đối số encode_chunked đã được thêm vào. Không có nỗ lực nào được thực hiện để xác định Độ dài nội dung cho các đối tượng tệp.

HTTPConnection.getresponse()

Nên được gọi sau khi yêu cầu được gửi để nhận phản hồi từ máy chủ. Trả về một phiên bản HTTPResponse.

Thay đổi trong phiên bản 3.5: Nếu ConnectionError hoặc lớp con được nâng lên, đối tượng HTTPConnection sẽ sẵn sàng kết nối lại khi có yêu cầu mới được gửi.

Lưu ý rằng điều này không áp dụng cho OSErrors được nâng lên bởi ổ cắm bên dưới. Thay vào đó, người gọi có trách nhiệm gọi close() trên kết nối hiện có.

HTTPConnection.set_debuglevel(level)

Đặt mức độ gỡ lỗi. Mức gỡ lỗi mặc định là 0, nghĩa là không có kết quả gỡ lỗi nào được in ra. Bất kỳ giá trị nào lớn hơn 0 sẽ khiến tất cả đầu ra gỡ lỗi hiện được xác định sẽ được in ra thiết bị xuất chuẩn. debuglevel được chuyển tới bất kỳ đối tượng HTTPResponse mới nào được tạo.

Added in version 3.1.

HTTPConnection.set_tunnel(host, port=None, headers=None)

Đặt máy chủ và cổng cho HTTP Connect Tunnelling. Điều này cho phép chạy kết nối thông qua máy chủ proxy.

Các đối số hostport chỉ định điểm cuối của kết nối đường hầm (tức là địa chỉ có trong yêu cầu CONNECT, not địa chỉ của máy chủ proxy).

Đối số headers phải là ánh xạ của các tiêu đề HTTP bổ sung để gửi cùng với yêu cầu CONNECT.

Vì HTTP/1.1 được sử dụng cho yêu cầu tạo đường hầm HTTP CONNECT, nên as per the RFC, tiêu đề HTTP Host: phải được cung cấp, khớp với biểu mẫu quyền của mục tiêu yêu cầu được cung cấp làm đích cho yêu cầu CONNECT. Nếu tiêu đề HTTP Host: không được cung cấp thông qua đối số tiêu đề, thì một tiêu đề sẽ được tạo và truyền tự động.

Ví dụ: để chuyển qua máy chủ proxy HTTPS chạy cục bộ trên cổng 8080, chúng tôi sẽ chuyển địa chỉ của proxy tới hàm tạo HTTPSConnection và địa chỉ của máy chủ mà cuối cùng chúng tôi muốn tiếp cận với phương thức set_tunnel():

>>> nhập http.client
>>> conn = http.client.HTTPSConnection("localhost", 8080)
>>> conn.set_tunnel("www.python.org")
>>> conn.request("HEAD","/index.html")

Added in version 3.2.

Thay đổi trong phiên bản 3.12: Yêu cầu đường hầm HTTP CONNECT sử dụng giao thức HTTP/1.1, được nâng cấp từ giao thức HTTP/1.0. Các tiêu đề Host: HTTP là bắt buộc đối với HTTP/1.1, do đó, một tiêu đề sẽ được tạo và truyền tự động nếu không được cung cấp trong đối số tiêu đề.

HTTPConnection.get_proxy_response_headers()

Trả về một từ điển có tiêu đề phản hồi nhận được từ máy chủ proxy cho yêu cầu CONNECT.

Nếu yêu cầu CONNECT không được gửi, phương thức sẽ trả về None.

Added in version 3.12.

HTTPConnection.connect()

Kết nối với máy chủ được chỉ định khi đối tượng được tạo. Theo mặc định, điều này được gọi tự động khi thực hiện yêu cầu nếu máy khách chưa có kết nối.

Tăng một auditing event http.client.connect với các đối số self, host, port.

HTTPConnection.close()

Đóng kết nối với máy chủ.

HTTPConnection.blocksize

Kích thước bộ đệm tính bằng byte để gửi nội dung thư giống như tệp.

Added in version 3.7.

Để thay thế cho việc sử dụng phương pháp request() được mô tả ở trên, bạn cũng có thể gửi yêu cầu của mình từng bước bằng cách sử dụng bốn chức năng bên dưới.

HTTPConnection.putrequest(method, url, skip_host=False, skip_accept_encoding=False)

Đây sẽ là cuộc gọi đầu tiên sau khi kết nối đến máy chủ được thực hiện. Nó gửi một dòng đến máy chủ bao gồm chuỗi method, chuỗi url và phiên bản HTTP (HTTP/1.1). Để tắt tính năng tự động gửi tiêu đề Host: hoặc Accept-Encoding: (ví dụ: để chấp nhận mã hóa nội dung bổ sung), hãy chỉ định skip_host hoặc skip_accept_encoding với các giá trị không sai.

HTTPConnection.putheader(header, argument[, ...])

Gửi tiêu đề kiểu RFC 822- tới máy chủ. Nó gửi một dòng đến máy chủ bao gồm tiêu đề, dấu hai chấm, dấu cách và đối số đầu tiên. Nếu đưa ra nhiều đối số hơn, các dòng tiếp tục sẽ được gửi, mỗi dòng bao gồm một tab và một đối số.

HTTPConnection.endheaders(message_body=None, *, encode_chunked=False)

Gửi một dòng trống đến máy chủ, báo hiệu sự kết thúc của tiêu đề. Đối số message_body tùy chọn có thể được sử dụng để chuyển nội dung thư được liên kết với yêu cầu.

Nếu encode_chunkedTrue, kết quả của mỗi lần lặp của message_body sẽ được mã hóa chunk như được chỉ định trong RFC 7230, Mục 3.3.1. Cách dữ liệu được mã hóa phụ thuộc vào loại message_body. Nếu message_body triển khai buffer interface thì mã hóa sẽ tạo thành một đoạn duy nhất. Nếu message_bodycollections.abc.Iterable, mỗi lần lặp của message_body sẽ tạo ra một đoạn. Nếu message_bodyfile object, mỗi lệnh gọi tới .read() sẽ dẫn đến một đoạn. Phương thức này tự động báo hiệu sự kết thúc của dữ liệu được mã hóa chunk ngay sau message_body.

Ghi chú

Do đặc tả mã hóa chunked, các đoạn trống do phần thân vòng lặp tạo ra sẽ bị bộ mã hóa chunk bỏ qua. Điều này là để tránh việc máy chủ mục tiêu chấm dứt sớm việc đọc yêu cầu do mã hóa không đúng định dạng.

Thay đổi trong phiên bản 3.6: Đã thêm hỗ trợ mã hóa chunked và tham số encode_chunked.

HTTPConnection.send(data)

Gửi dữ liệu đến máy chủ. Điều này chỉ nên được sử dụng trực tiếp sau khi phương thức endheaders() được gọi và trước khi getresponse() được gọi.

Tăng một auditing event http.client.send với các đối số self, data.

Đối tượng HTTPResponse

Một phiên bản HTTPResponse bao bọc phản hồi HTTP từ máy chủ. Nó cung cấp quyền truy cập vào các tiêu đề yêu cầu và nội dung thực thể. Phản hồi là một đối tượng có thể lặp lại và có thể được sử dụng trong câu lệnh with.

Thay đổi trong phiên bản 3.5: Giao diện io.BufferedIOBase hiện đã được triển khai và tất cả các hoạt động đọc của nó đều được hỗ trợ.

HTTPResponse.read([amt])

Đọc và trả về nội dung phản hồi hoặc tối đa byte amt tiếp theo.

HTTPResponse.readinto(b)

Đọc tối đa len(b) byte tiếp theo của nội dung phản hồi vào bộ đệm b. Trả về số byte đã đọc.

Added in version 3.3.

HTTPResponse.getheader(name, default=None)

Trả về giá trị của tiêu đề name hoặc default nếu không có tiêu đề nào khớp với name. Nếu có nhiều hơn một tiêu đề có tên name, hãy trả về tất cả các giá trị được nối bởi ', '. Nếu default là bất kỳ chuỗi lặp nào khác ngoài một chuỗi đơn, thì các phần tử của nó cũng được trả về tương tự và được nối bằng dấu phẩy.

HTTPResponse.getheaders()

Trả về danh sách các bộ dữ liệu (tiêu đề, giá trị).

HTTPResponse.fileno()

Trả về fileno của ổ cắm bên dưới.

HTTPResponse.msg

Một phiên bản http.client.HTTPMessage chứa các tiêu đề phản hồi. http.client.HTTPMessage là một lớp con của email.message.Message.

HTTPResponse.version

Phiên bản giao thức HTTP được máy chủ sử dụng. 10 cho HTTP/1.0, 11 cho HTTP/1.1.

HTTPResponse.url

URL của tài nguyên được truy xuất, thường được sử dụng để xác định xem có chuyển hướng hay không.

HTTPResponse.headers

Tiêu đề của phản hồi ở dạng phiên bản email.message.EmailMessage.

HTTPResponse.status

Mã trạng thái được máy chủ trả về.

HTTPResponse.reason

Cụm từ lý do được máy chủ trả về.

HTTPResponse.debuglevel

Một cái móc gỡ lỗi. Nếu debuglevel lớn hơn 0, tin nhắn sẽ được in ra thiết bị xuất chuẩn khi phản hồi được đọc và phân tích cú pháp.

HTTPResponse.closed

True nếu luồng bị đóng.

HTTPResponse.geturl()

Sắp loại bỏ từ phiên bản 3.9: Không được dùng nữa để ủng hộ url.

HTTPResponse.info()

Sắp loại bỏ từ phiên bản 3.9: Không được dùng nữa để ủng hộ headers.

HTTPResponse.getcode()

Sắp loại bỏ từ phiên bản 3.9: Không được dùng nữa để ủng hộ status.

Ví dụ

Đây là phiên ví dụ sử dụng phương thức GET:

>>> nhập http.client
>>> conn = http.client.HTTPSConnection("www.python.org")
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> in(r1.status, r1.reason)
200 được rồi
>>> data1 = r1.read() # This sẽ trả về toàn bộ nội dung.
>>> # The ví dụ sau minh họa việc đọc dữ liệu theo từng đoạn.
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> while chunk := r1.read(200):
... print(repr(chunk))
b'<!doctype html>\n<!--[if"...
...
>>> # Example của một yêu cầu không hợp lệ
>>> conn = http.client.HTTPSConnection("docs.python.org")
>>> conn.request("GET", "/parrot.spam")
>>> r2 = conn.getresponse()
>>> in(r2.status, r2.reason)
404 Không tìm thấy
>>> data2 = r2.read()
>>> conn.close()

Đây là một phiên ví dụ sử dụng phương pháp HEAD. Lưu ý rằng phương thức HEAD không bao giờ trả về bất kỳ dữ liệu nào.

>>> nhập http.client
>>> conn = http.client.HTTPSConnection("www.python.org")
>>> conn.request("HEAD", "/")
>>> res = conn.getresponse()
>>> print(res.status, res.reason)
200 được rồi
>>> dữ liệu = res.read()
>>> in(len(dữ liệu))
0
>>> dữ liệu == b''
đúng

Đây là phiên ví dụ sử dụng phương thức POST:

>>> nhập http.client, urllib.parse
>>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
>>> tiêu đề = {"Loại nội dung": "application/x-www-form-urlencoded",
... "Chấp nhận": "text/plain"}
>>> conn = http.client.HTTPConnection("bugs.python.org")
>>> conn.request("POST", "", thông số, tiêu đề)
>>> phản hồi = conn.getresponse()
>>> print(response.status, reply.reason)
302 Đã tìm thấy
>>> dữ liệu = phản hồi.read()
>>> dữ liệu
b'Chuyển hướng tới <a href="https://bugs.python.org/issue12524">https://bugs.python.org/issue12524</a>'
>>> conn.close()

Các yêu cầu HTTP PUT phía khách hàng rất giống với các yêu cầu POST. Sự khác biệt chỉ nằm ở phía máy chủ, nơi các máy chủ HTTP sẽ cho phép tạo tài nguyên thông qua các yêu cầu PUT. Cần lưu ý rằng các phương thức HTTP tùy chỉnh cũng được xử lý trong urllib.request.Request bằng cách đặt thuộc tính phương thức thích hợp. Đây là phiên ví dụ sử dụng phương thức PUT:

>>> # This tạo yêu cầu HTTP
>>> # with nội dung của BODY dưới dạng biểu diễn kèm theo
>>> # for tài nguyên http://localhost:8080/file
...
>>> nhập http.client
>>> BODY = "*zz000zz*"
>>> conn = http.client.HTTPConnection("localhost", 8080)
>>> conn.request("PUT", "/file", BODY)
>>> phản hồi = conn.getresponse()
>>> print(response.status, reply.reason)
200, được rồi

Đối tượng HTTPMessage

class http.client.HTTPMessage(email.message.Message)

Một phiên bản http.client.HTTPMessage giữ các tiêu đề từ phản hồi HTTP. Nó được triển khai bằng lớp email.message.Message.