Python HTTP Client – Cách gửi yêu cầu HTTP và xử lý phản hồi
5 phút đọc30/08/2025
Về tác giả
I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information.
@#@
Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.
Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn
{"success":true,"head":"<title>Python HTTP Client – Cách gửi yêu cầu HTTP và xử lý phản hồi - CyStack Tutorial</title>\n<meta name=\"description\" content=\"Khám phá Python HTTP Client: cách gửi request, xử lý response và quản lý API dễ dàng. Hướng dẫn chi tiết với ví dụ thực tế cho lập trình viên.\"/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large\"/>\n<link rel=\"canonical\" href=\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/\" />\n<meta property=\"og:locale\" content=\"en_US\" />\n<meta property=\"og:type\" content=\"article\" />\n<meta property=\"og:title\" content=\"Python HTTP Client – Cách gửi yêu cầu HTTP và xử lý phản hồi - CyStack Tutorial\" />\n<meta property=\"og:description\" content=\"Khám phá Python HTTP Client: cách gửi request, xử lý response và quản lý API dễ dàng. Hướng dẫn chi tiết với ví dụ thực tế cho lập trình viên.\" />\n<meta property=\"og:url\" content=\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/\" />\n<meta property=\"og:site_name\" content=\"CyStack Tutorial\" />\n<meta property=\"article:tag\" content=\"vi\" />\n<meta property=\"article:section\" content=\"Python\" />\n<meta property=\"og:updated_time\" content=\"2026-08-03T18:18:23+07:00\" />\n<meta property=\"og:image\" content=\"https://s2.cystack.net/tutorial/30075409/python-http-client.png\" />\n<meta property=\"og:image:secure_url\" content=\"https://s2.cystack.net/tutorial/30075409/python-http-client.png\" />\n<meta property=\"og:image:width\" content=\"1200\" />\n<meta property=\"og:image:height\" content=\"630\" />\n<meta property=\"og:image:alt\" content=\"Python HTTP Client\" />\n<meta property=\"og:image:type\" content=\"image/png\" />\n<meta property=\"article:published_time\" content=\"2025-08-30T07:58:34+07:00\" />\n<meta property=\"article:modified_time\" content=\"2026-08-03T18:18:23+07:00\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:title\" content=\"Python HTTP Client – Cách gửi yêu cầu HTTP và xử lý phản hồi - CyStack Tutorial\" />\n<meta name=\"twitter:description\" content=\"Khám phá Python HTTP Client: cách gửi request, xử lý response và quản lý API dễ dàng. Hướng dẫn chi tiết với ví dụ thực tế cho lập trình viên.\" />\n<meta name=\"twitter:image\" content=\"https://s2.cystack.net/tutorial/30075409/python-http-client.png\" />\n<meta name=\"twitter:label1\" content=\"Written by\" />\n<meta name=\"twitter:data1\" content=\"Chris Pham\" />\n<meta name=\"twitter:label2\" content=\"Time to read\" />\n<meta name=\"twitter:data2\" content=\"5 minutes\" />\n<script type=\"application/ld+json\" class=\"rank-math-schema\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://blog.cystack.org/tutorial/#person\",\"name\":\"CyStack Tutorial\"},{\"@type\":\"WebSite\",\"@id\":\"https://blog.cystack.org/tutorial/#website\",\"url\":\"https://blog.cystack.org/tutorial\",\"name\":\"CyStack Tutorial\",\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https://s2.cystack.net/tutorial/30075409/python-http-client.png\",\"url\":\"https://s2.cystack.net/tutorial/30075409/python-http-client.png\",\"width\":\"1200\",\"height\":\"630\",\"caption\":\"Python HTTP Client\",\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":\"1\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":\"2\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/category/python/\",\"name\":\"Python\"}},{\"@type\":\"ListItem\",\"position\":\"3\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/\",\"name\":\"Python HTTP Client \\u2013 C\\u00e1ch g\\u1eedi y\\u00eau c\\u1ea7u HTTP v\\u00e0 x\\u1eed l\\u00fd ph\\u1ea3n h\\u1ed3i\"}}]},{\"@type\":\"WebPage\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/#webpage\",\"url\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/\",\"name\":\"Python HTTP Client \\u2013 C\\u00e1ch g\\u1eedi y\\u00eau c\\u1ea7u HTTP v\\u00e0 x\\u1eed l\\u00fd ph\\u1ea3n h\\u1ed3i - CyStack Tutorial\",\"datePublished\":\"2025-08-30T07:58:34+07:00\",\"dateModified\":\"2026-08-03T18:18:23+07:00\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/#website\"},\"primaryImageOfPage\":{\"@id\":\"https://s2.cystack.net/tutorial/30075409/python-http-client.png\"},\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/#breadcrumb\"}},{\"@type\":\"Person\",\"@id\":\"https://blog.cystack.org/tutorial/author/codeweaver/\",\"name\":\"Chris Pham\",\"url\":\"https://blog.cystack.org/tutorial/author/codeweaver/\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://secure.gravatar.com/avatar/7a3584c941fa360ac061b2a8f15684ced7b92daa1f09481be135a684d989e9b9?s=96&d=mm&r=g\",\"url\":\"https://secure.gravatar.com/avatar/7a3584c941fa360ac061b2a8f15684ced7b92daa1f09481be135a684d989e9b9?s=96&d=mm&r=g\",\"caption\":\"Chris Pham\",\"inLanguage\":\"en-US\"}},{\"@type\":\"BlogPosting\",\"headline\":\"Python HTTP Client \\u2013 C\\u00e1ch g\\u1eedi y\\u00eau c\\u1ea7u HTTP v\\u00e0 x\\u1eed l\\u00fd ph\\u1ea3n h\\u1ed3i - CyStack Tutorial\",\"keywords\":\"Python http client,http client\",\"datePublished\":\"2025-08-30T07:58:34+07:00\",\"dateModified\":\"2026-08-03T18:18:23+07:00\",\"articleSection\":\"Python\",\"author\":{\"@id\":\"https://blog.cystack.org/tutorial/author/codeweaver/\",\"name\":\"Chris Pham\"},\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"description\":\"Kh\\u00e1m ph\\u00e1 Python HTTP Client: c\\u00e1ch g\\u1eedi request, x\\u1eed l\\u00fd response v\\u00e0 qu\\u1ea3n l\\u00fd API d\\u1ec5 d\\u00e0ng. H\\u01b0\\u1edbng d\\u1eabn chi ti\\u1ebft v\\u1edbi v\\u00ed d\\u1ee5 th\\u1ef1c t\\u1ebf cho l\\u1eadp tr\\u00ecnh vi\\u00ean.\",\"name\":\"Python HTTP Client \\u2013 C\\u00e1ch g\\u1eedi y\\u00eau c\\u1ea7u HTTP v\\u00e0 x\\u1eed l\\u00fd ph\\u1ea3n h\\u1ed3i - CyStack Tutorial\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/#richSnippet\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/#webpage\"},\"image\":{\"@id\":\"https://s2.cystack.net/tutorial/30075409/python-http-client.png\"},\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/30/python-http-client/#webpage\"}}]}</script>\n"}
Python HTTP module định nghĩa các lớp cung cấp phía client của các giao thức HTTP và HTTPS. Trong hầu hết các chương trình, HTTP module không được sử dụng trực tiếp mà được kết hợp với urllib module để xử lý các kết nối URL và tương tác với các yêu cầu HTTP. Hôm nay chúng ta sẽ tìm hiểu cách sử dụng Python HTTP client để thực hiện yêu cầu HTTP và sau đó phân tích trạng thái phản hồi và lấy dữ liệu về nội dung phản hồi.

Python HTTP Client
Trong bài đăng này về Python HTTP module, chúng ta sẽ thử tạo kết nối và thực hiện các yêu cầu HTTP như GET, POST và PUT. Hãy cùng tìm hiểu.
Tạo kết nối HTTP
Chúng ta sẽ bắt đầu với điều đơn giản nhất mà HTTP module có thể làm. Chúng ta có thể dễ dàng tạo các kết nối HTTP bằng cách sử dụng module này. Đây là một chương trình mẫu:
import http.client
connection = http.client.HTTPConnection('www.python.org', 80, timeout=10)
print(connection)
Hãy xem đầu ra của chương trình này:

Trong tập lệnh này, chúng ta đã kết nối với URL trên Cổng 80 với một thời gian chờ cụ thể.
Python HTTP GET
Bây giờ, chúng ta sẽ sử dụng HTTP client để nhận phản hồi và trạng thái từ một URL. Hãy xem một đoạn code:
import http.client
connection = http.client.HTTPSConnection("www.journaldev.com")
connection.request("GET", "/")
response = connection.getresponse()
print("Status: {} and reason: {}".format(response.status, response.reason))
connection.close()
Trong tập lệnh ở trên, chúng ta đã sử dụng một URL và kiểm tra trạng thái bằng đối tượng kết nối. Hãy xem đầu ra của chương trình này:

Hãy nhớ đóng kết nối sau khi bạn đã sử dụng xong đối tượng kết nối. Ngoài ra, hãy lưu ý rằng chúng ta đã sử dụng HTTPSConnection để thiết lập kết nối vì trang web được phục vụ qua giao thức HTTPS.
Gặp phải lỗi: SSL: CERTIFICATE_VERIFY_FAILED?
Khi tôi lần đầu thực thi chương trình trên, tôi nhận được lỗi sau liên quan đến SSL certificates (chứng chỉ SSL).
$ python3.6 http_client.py
Traceback (most recent call last):
File "http_client.py", line 4, in <module>
connection.request("GET", "/")
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output
self.send(msg)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect
server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 401, in wrap_socket
context=self, session=session)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 808, in init
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1061, in do_handshake
self._sslobj.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)
$
Từ đầu ra, rõ ràng là nó có liên quan đến SSL certificates. Nhưng chứng chỉ trang web vẫn ổn, vì vậy phải có điều gì đó liên quan đến thiết lập của tôi. Sau khi tìm kiếm trên Google, tôi thấy rằng trên MacOS, chúng ta cần chạy tệp Install Certificates.command có trong thư mục cài đặt Python để khắc phục sự cố này. Hình ảnh bên dưới cho thấy đầu ra được tạo ra bởi việc thực thi lệnh này, có vẻ như nó đang cài đặt các certificates mới nhất để sử dụng khi tạo các kết nối SSL.

Lưu ý rằng tôi gặp lỗi này trên Mac OS. Tuy nhiên, trên hệ thống Ubuntu của tôi, nó hoạt động hoàn toàn tốt.

Lấy danh sách Header từ request
Từ phản hồi chúng ta nhận được, các headers (tiêu đề) thường chứa thông tin quan trọng về loại dữ liệu được gửi trở lại từ server và cả trạng thái phản hồi. Chúng ta có thể lấy danh sách các headers từ chính đối tượng phản hồi. Hãy xem một đoạn mã là một phiên bản được sửa đổi một chút của chương trình cuối cùng:
import http.client
import pprint
connection = http.client.HTTPSConnection("www.journaldev.com")
connection.request("GET", "/")
response = connection.getresponse()
headers = response.getheaders()
pp = pprint.PrettyPrinter(indent=4)
pp.pprint("Headers: {}".format(headers))
Hãy xem đầu ra của chương trình này:

Python HTTP POST
Chúng ta cũng có thể POST dữ liệu lên một URL với HTTP module và nhận lại phản hồi. Đây là một chương trình mẫu:
import http.client
import json
conn = http.client.HTTPSConnection('www.httpbin.org')
headers = {'Content-type': 'application/json'}
foo = {'text': 'Hello HTTP #1 cool, and #1!'}
json_data = json.dumps(foo)
conn.request('POST', '/post', json_data, headers)
response = conn.getresponse()
print(response.read().decode())
Hãy xem đầu ra của chương trình này:

Bạn có thể tự do sử dụng HTTP Bin library (thư viện HTTP Bin) để thử nhiều yêu cầu hơn.
Yêu cầu PUT HTTP Python
Tất nhiên, chúng ta cũng có thể thực hiện yêu cầu PUT bằng cách sử dụng chính HTTP module. Chúng ta sẽ sử dụng chương trình cuối cùng. Hãy xem một đoạn mã:
import http.client
import json
conn = http.client.HTTPSConnection('www.httpbin.org')
headers = {'Content-type': 'application/json'}
foo = {'text': 'Hello HTTP #1 cool, and #1!'}
json_data = json.dumps(foo)
conn.request("PUT", "/put", json_data)
response = conn.getresponse()
print(response.status, response.reason)
Hãy xem đầu ra của chương trình này:

Kết luận
Trong bài học này, chúng ta đã nghiên cứu các thao tác HTTP đơn giản có thể được thực hiện bằng cách sử dụng http.client. Chúng ta cũng có thể tạo python http server bằng cách sử dụng SimpleHTTPServer module. Tham khảo: API Doc