Con trăn getheader

Bạn sẽ cần một phiên bản

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
6 để thực hiện các yêu cầu. Đối tượng này xử lý tất cả các chi tiết về tổng hợp kết nối và an toàn luồng để bạn không phải

>>> http = urllib3.PoolManager()

Để thực hiện một yêu cầu sử dụng

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7 trả về một đối tượng
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
9, phần Nội dung phản hồi giải thích cách xử lý các phản hồi khác nhau.

Bạn có thể sử dụng

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7 để thực hiện các yêu cầu bằng bất kỳ động từ HTTP nào

>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )

Phần Dữ liệu yêu cầu đề cập đến việc gửi các loại dữ liệu yêu cầu khác, bao gồm JSON, tệp và dữ liệu nhị phân.

Nội dung phản hồi#

Đối tượng

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
9 cung cấp các thuộc tính
>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
2,
>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
3 và
>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
4

>>> http = urllib3.PoolManager()
2

Nội dung JSON #

Nội dung JSON có thể được tải bằng cách giải mã và giải tuần tự hóa thuộc tính

>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
3 của yêu cầu

>>> http = urllib3.PoolManager()
4

Nội dung nhị phân #

Thuộc tính

>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
3 của phản hồi luôn được đặt thành chuỗi byte biểu thị nội dung phản hồi

>>> http = urllib3.PoolManager()
6

Ghi chú

Đối với các phản hồi lớn hơn, đôi khi tốt hơn là truyền phát phản hồi.

Sử dụng Trình bao bọc io với Nội dung phản hồi #

Đôi khi bạn muốn sử dụng trực tiếp

>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
7 hoặc các đối tượng tương tự như trình đọc CSV với dữ liệu
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
9. Làm cho hai giao diện này hoạt động tốt với nhau yêu cầu sử dụng thuộc tính
>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
9 bằng cách đặt nó thành
>>> http = urllib3.PoolManager()
20. Theo mặc định, các phản hồi HTTP bị đóng sau khi đọc tất cả các byte, điều này sẽ vô hiệu hóa hành vi đó

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
1

Yêu cầu dữ liệu #

Tiêu đề #

Bạn có thể chỉ định các tiêu đề làm từ điển trong đối số

>>> r = http.request(
..     'POST',
..     'http://httpbin.org/post',
..     fields={'hello': 'world'}
.. )
4 trong
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
4

Tham số truy vấn #

Đối với các yêu cầu

>>> http = urllib3.PoolManager()
23,
>>> http = urllib3.PoolManager()
24 và
>>> http = urllib3.PoolManager()
25, bạn có thể chỉ cần chuyển đối số dưới dạng từ điển trong đối số
>>> http = urllib3.PoolManager()
26 cho
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
00

Đối với các yêu cầu

>>> http = urllib3.PoolManager()
28 và
>>> http = urllib3.PoolManager()
29, bạn cần mã hóa thủ công các tham số truy vấn trong URL

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
01

Dữ liệu biểu mẫu #

Đối với các yêu cầu

>>> http = urllib3.PoolManager()
29 và
>>> http = urllib3.PoolManager()
28, urllib3 sẽ tự động mã hóa từ điển trong đối số
>>> http = urllib3.PoolManager()
26 được cung cấp cho
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
02

JSON#

Bạn có thể gửi yêu cầu JSON bằng cách chỉ định dữ liệu được mã hóa làm đối số

>>> http = urllib3.PoolManager()
44 và đặt tiêu đề
>>> http = urllib3.PoolManager()
45 khi gọi
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
03

Tệp và dữ liệu nhị phân #

Để tải tệp lên bằng cách sử dụng mã hóa

>>> http = urllib3.PoolManager()
47, bạn có thể sử dụng phương pháp tương tự như Dữ liệu biểu mẫu và chỉ định trường tệp dưới dạng một bộ của
>>> http = urllib3.PoolManager()
48.

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
04

Mặc dù việc chỉ định tên tệp không bắt buộc, nhưng nó được khuyến nghị để phù hợp với hành vi của trình duyệt. Bạn cũng có thể chuyển mục thứ ba trong bộ dữ liệu để chỉ định rõ ràng loại MIME của tệp

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
05

Để gửi dữ liệu nhị phân thô, chỉ cần chỉ định đối số

>>> http = urllib3.PoolManager()
44. Bạn cũng nên đặt tiêu đề
>>> http = urllib3.PoolManager()
45

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
06

Xác minh chứng chỉ #

Ghi chú

Mới trong phiên bản 1. 25

Các kết nối HTTPS hiện được xác minh theo mặc định (

>>> http = urllib3.PoolManager()
61)

Mặc dù bạn có thể tắt xác minh chứng chỉ bằng cách đặt

>>> http = urllib3.PoolManager()
62, nhưng bạn nên để nó ở trạng thái bật

Trừ khi được chỉ định khác, urllib3 sẽ cố tải các cửa hàng chứng chỉ hệ thống mặc định. Phương pháp đa nền tảng đáng tin cậy nhất là sử dụng gói certifi cung cấp gói chứng chỉ gốc của Mozilla

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
07

Bạn cũng có thể cài đặt certifi cùng với urllib3 bằng cách sử dụng tiện ích bổ sung

>>> http = urllib3.PoolManager()
63

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
08

Cảnh báo

Nếu đang sử dụng Python 2, bạn có thể cần các gói bổ sung. Xem phần bên dưới để biết thêm chi tiết.

Khi bạn có chứng chỉ, bạn có thể tạo một

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
6 để xác minh chứng chỉ khi đưa ra yêu cầu

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
09

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
6 sẽ tự động xử lý xác minh chứng chỉ và sẽ tăng
>>> http = urllib3.PoolManager()
66 nếu xác minh không thành công

>>> http = urllib3.PoolManager()
0

Ghi chú

Bạn có thể sử dụng các chứng chỉ do hệ điều hành cung cấp nếu muốn. Chỉ cần chỉ định đường dẫn đầy đủ đến gói chứng chỉ làm đối số

>>> http = urllib3.PoolManager()
67 thay vì
>>> http = urllib3.PoolManager()
68. Ví dụ: hầu hết các hệ thống Linux lưu trữ chứng chỉ tại
>>> http = urllib3.PoolManager()
69. Các hệ điều hành khác có thể khó khăn

Xác minh chứng chỉ trong Python 2#

Các phiên bản cũ hơn của Python 2 được xây dựng với mô-đun

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
10 thiếu hỗ trợ SNI và có thể chậm hơn các bản cập nhật bảo mật. Vì những lý do này, bạn nên sử dụng pyOpenSSL.

Nếu bạn cài đặt urllib3 với phần bổ sung

>>> http = urllib3.PoolManager()
63, tất cả các gói cần thiết để xác minh chứng chỉ trên Python 2 sẽ được cài đặt

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
08

Nếu bạn muốn cài đặt các gói theo cách thủ công, bạn sẽ cần

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
12,
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
13,
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
14 và
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
15

Ghi chú

Nếu bạn không sử dụng macOS hoặc Windows, hãy lưu ý rằng mật mã yêu cầu các gói hệ thống bổ sung để biên dịch. Xem xây dựng mật mã trên Linux để biết danh sách các gói cần thiết

Sau khi cài đặt, bạn có thể yêu cầu urllib3 sử dụng pyOpenSSL bằng cách sử dụng

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
16

>>> http = urllib3.PoolManager()
2

Cuối cùng, bạn có thể tạo một

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
6 để xác minh các chứng chỉ khi thực hiện các yêu cầu

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
09

Nếu bạn không muốn sử dụng pyOpenSSL, bạn chỉ cần bỏ qua lệnh gọi tới

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
18. urllib3 sẽ quay trở lại mô-đun
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
10 của thư viện tiêu chuẩn. Bạn có thể gặp phải một số cảnh báo khi thực hiện việc này.

Cảnh báo

Nếu bạn không sử dụng pyOpenSSL, Python phải được biên dịch với hỗ trợ ssl để xác minh chứng chỉ hoạt động. Nó không phổ biến, nhưng có thể biên dịch Python mà không cần hỗ trợ SSL. Xem chủ đề StackOverflow này để biết thêm chi tiết

Nếu bạn đang sử dụng Google App Engine, bạn phải bật hỗ trợ SSL một cách rõ ràng trong

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
40 của mình

>>> http = urllib3.PoolManager()
4

Sử dụng Thời gian chờ #

Thời gian chờ cho phép bạn kiểm soát khoảng thời gian (tính bằng giây) yêu cầu được phép chạy trước khi bị hủy bỏ. Trong các trường hợp đơn giản, bạn có thể chỉ định thời gian chờ là

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
41 đến
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

>>> http = urllib3.PoolManager()
5

Để kiểm soát chi tiết hơn, bạn có thể sử dụng phiên bản

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
43 cho phép bạn chỉ định thời gian chờ kết nối và đọc riêng biệt

>>> http = urllib3.PoolManager()
6

Nếu bạn muốn tất cả các yêu cầu có cùng thời gian chờ, bạn có thể chỉ định thời gian chờ ở cấp độ

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
6

>>> http = urllib3.PoolManager()
7

Bạn vẫn ghi đè thời gian chờ cấp nhóm này bằng cách chỉ định

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
45 thành
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

Đang thử lại yêu cầu#

urllib3 có thể tự động thử lại các yêu cầu bình thường. Cơ chế tương tự này cũng xử lý chuyển hướng. Bạn có thể kiểm soát các lần thử lại bằng tham số

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
47 đến
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7. Theo mặc định, urllib3 sẽ thử lại yêu cầu 3 lần và theo dõi tối đa 3 lần chuyển hướng

Để thay đổi số lần thử lại, chỉ cần chỉ định một số nguyên

>>> http = urllib3.PoolManager()
8

Để tắt tất cả logic thử lại và chuyển hướng, hãy chỉ định

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
49

>>> http = urllib3.PoolManager()
9

Để tắt chuyển hướng nhưng vẫn giữ logic thử lại, hãy chỉ định

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
000

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
0

Để kiểm soát chi tiết hơn, bạn có thể sử dụng phiên bản

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
001. Lớp này cho phép bạn kiểm soát nhiều hơn cách các yêu cầu được thử lại

Ví dụ: để thực hiện tổng cộng 3 lần thử lại, nhưng giới hạn chỉ 2 lần chuyển hướng

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
1

Bạn cũng có thể vô hiệu hóa các ngoại lệ đối với quá nhiều chuyển hướng và chỉ cần trả lại phản hồi

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
002

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
2

Nếu bạn muốn tất cả các yêu cầu tuân theo cùng một chính sách thử lại, bạn có thể chỉ định thử lại ở cấp độ

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
6

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
3

Bạn vẫn ghi đè chính sách thử lại ở cấp nhóm này bằng cách chỉ định

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
47 thành
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
7

Lỗi & Ngoại lệ #

ví dụ: urllib3 kết thúc các ngoại lệ cấp thấp hơn

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
4

Xem

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
006 để biết danh sách đầy đủ tất cả các trường hợp ngoại lệ

Ghi nhật ký #

Nếu bạn đang sử dụng thư viện chuẩn mô-đun

>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.data
b'User-agent: *\nDisallow: /deny\n'
007 urllib3 sẽ phát ra một số nhật ký. Trong một số trường hợp, điều này có thể không mong muốn. Bạn có thể sử dụng giao diện trình ghi nhật ký tiêu chuẩn để thay đổi cấp độ nhật ký cho trình ghi nhật ký của urllib3