Hướng dẫn python requests raise for status - tăng yêu cầu python cho trạng thái

Nếu bạn không chắc chắn, hãy làm theo câu trả lời của Ian Goldby.

... Tuy nhiên, xin lưu ý rằng

>>> r = requests.get('https://api.github.com/events')
5 không phải là một giải pháp kỳ diệu hoặc đặc biệt thông minh-đó là một chức năng rất đơn giản để giải mã thân xe phản ứng và ném một ngoại lệ cho mã HTTP 400-599, phân biệt các lỗi phía máy khách và phía máy chủ (xem Mã của nó ở đây).

Và đặc biệt là các phản hồi lỗi phía khách hàng có thể chứa thông tin có giá trị trong thân phản hồi mà bạn có thể muốn xử lý. Ví dụ, phản hồi yêu cầu xấu HTTP 400 có thể chứa lý do lỗi.

Trong trường hợp như vậy, có thể là sạch hơn khi không sử dụng

>>> r = requests.get('https://api.github.com/events')
5 nhưng hãy bao gồm tất cả các trường hợp mà chính nó tự làm.but do cover all the cases it does by yourself.

Mã ví dụ

try:
    r = requests.get(url)

    # process the specific codes from the range 400-599
    # that you are interested in first
    if r.status_code == 400:
        invalid_request_reason = r.text
        print(f"Your request has failed because: {invalid_request_reason}")
        return
    # this will handle all other errors
    elif r.status_code > 400:
        print(f"Your request has failed with status code: {r.status_code}")
        return

except requests.exceptions.ConnectionError as err:
    # eg, no internet
    raise SystemExit(err)

# the rest of my code is going here

Trường hợp sử dụng trong thế giới thực

API của PuppetDB bằng ngôn ngữ truy vấn rối (PQL) trả lời với yêu cầu xấu HTTP 400 cho truy vấn không hợp lệ về mặt cú pháp với thông tin rất chính xác là lỗi.

Truy vấn yêu cầu:

nodes[certname] { certname == "bastion" }

Phần thân của phản ứng HTTP 400:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"

Xem yêu cầu kéo của tôi đến một ứng dụng sử dụng API này để hiển thị thông báo lỗi này cho người dùng ở đây, nhưng lưu ý rằng nó không chính xác theo mã ví dụ ở trên.

Háo hức để bắt đầu? Trang này giới thiệu tốt về cách bắt đầu với các yêu cầu.

Đầu tiên, hãy chắc chắn rằng:

  • Yêu cầu được cài đặtinstalled

  • Yêu cầu được cập nhậtup-to-date

Hãy để bắt đầu với một số ví dụ đơn giản.

Đưa ra yêu cầu Jo

Đưa ra yêu cầu với yêu cầu rất đơn giản.

Bắt đầu bằng cách nhập mô -đun yêu cầu:

Bây giờ, hãy để cố gắng để có được một trang web. Ví dụ này, hãy để Lừa nhận được dòng thời gian công khai của GitHub:

>>> r = requests.get('https://api.github.com/events')

Bây giờ, chúng ta có một đối tượng

>>> r = requests.get('https://api.github.com/events')
7 được gọi là
>>> r = requests.get('https://api.github.com/events')
8. Chúng ta có thể nhận được tất cả các thông tin chúng ta cần từ đối tượng này.

Yêu cầu API đơn giản có nghĩa là tất cả các dạng yêu cầu HTTP là rõ ràng. Ví dụ: đây là cách bạn thực hiện yêu cầu bài đăng HTTP:

>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})

Tốt đẹp? Còn các loại yêu cầu HTTP khác: đặt, xóa, đầu và tùy chọn? Tất cả đều đơn giản như vậy:

>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')

Đó là tất cả tốt và tốt, nhưng nó cũng chỉ là sự khởi đầu của những gì yêu cầu có thể làm.

Vượt qua các tham số trong URLS¶

Bạn thường muốn gửi một số loại dữ liệu trong chuỗi truy vấn URL. Nếu bạn đang xây dựng URL bằng tay, dữ liệu này sẽ được cung cấp dưới dạng các cặp khóa/giá trị trong URL sau một dấu hỏi, ví dụ:

>>> r = requests.get('https://api.github.com/events')
9. Yêu cầu cho phép bạn cung cấp các đối số này như một từ điển của chuỗi, sử dụng đối số từ khóa
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
0. Ví dụ, nếu bạn muốn chuyển
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
1 và
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
2 cho
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
3, bạn sẽ sử dụng mã sau:

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)

Bạn có thể thấy rằng URL đã được mã hóa chính xác bằng cách in URL:

>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1

Lưu ý rằng bất kỳ khóa từ điển nào có giá trị là

>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
4 sẽ không được thêm vào chuỗi truy vấn URL URL.

Bạn cũng có thể vượt qua danh sách các mục dưới dạng giá trị:

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3

Nội dung phản hồi

Chúng ta có thể đọc nội dung của phản hồi máy chủ. Hãy xem xét dòng thời gian GitHub một lần nữa:

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...

Yêu cầu sẽ tự động giải mã nội dung từ máy chủ. Hầu hết các ký tự Unicode được giải mã liền mạch.

Khi bạn đưa ra yêu cầu, các yêu cầu đưa ra những dự đoán có giáo dục về việc mã hóa phản hồi dựa trên các tiêu đề HTTP. Mã hóa văn bản được đoán bằng các yêu cầu được sử dụng khi bạn truy cập

>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
5. Bạn có thể tìm hiểu những yêu cầu mã hóa đang sử dụng và thay đổi nó, bằng cách sử dụng thuộc tính
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
6:

nodes[certname] { certname == "bastion" }
0

Nếu bạn thay đổi mã hóa, các yêu cầu sẽ sử dụng giá trị mới là

>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
6 bất cứ khi nào bạn gọi
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
5. Bạn có thể muốn làm điều này trong bất kỳ tình huống nào bạn có thể áp dụng logic đặc biệt để tìm ra mã hóa nội dung sẽ là gì. Ví dụ, HTML và XML có khả năng chỉ định mã hóa trong cơ thể của họ. Trong các tình huống như thế này, bạn nên sử dụng
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
9 để tìm mã hóa, sau đó đặt
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
6. Điều này sẽ cho phép bạn sử dụng
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
5 với mã hóa chính xác.

Yêu cầu cũng sẽ sử dụng mã hóa tùy chỉnh trong trường hợp bạn cần chúng. Nếu bạn đã tạo mã hóa của riêng mình và đăng ký nó với mô -đun

>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
2, bạn chỉ cần sử dụng tên codec làm giá trị của
>>> r = requests.post('https://httpbin.org/post', data={'key': 'value'})
6 và các yêu cầu sẽ xử lý việc giải mã cho bạn.

Nội dung phản hồi nhị phân

Bạn cũng có thể truy cập phần thân phản hồi dưới dạng byte, cho các yêu cầu không phải là văn bản:

nodes[certname] { certname == "bastion" }
1

Các mã hóa chuyển khoản

>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
4 và
>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
5 tự động được giải mã cho bạn.

Mã mã hóa

>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
6 được giải mã tự động cho bạn nếu thư viện Brotli như Brotli hoặc Brotlicffi được cài đặt.

Ví dụ: để tạo hình ảnh từ dữ liệu nhị phân được trả về bởi một yêu cầu, bạn có thể sử dụng mã sau:

nodes[certname] { certname == "bastion" }
2

Nội dung phản hồi JSON

Ngoài ra, còn có một bộ giải mã JSON tích hợp, trong trường hợp bạn đang xử lý dữ liệu JSON:

nodes[certname] { certname == "bastion" }
3

Trong trường hợp giải mã JSON thất bại,

>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
7 sẽ tăng một ngoại lệ. Ví dụ: nếu phản hồi nhận được 204 (không có nội dung) hoặc nếu phản hồi có chứa JSON không hợp lệ, hãy cố gắng tăng
>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
7
>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
9. Ngoại lệ bao bọc này cung cấp khả năng tương tác cho nhiều trường hợp ngoại lệ có thể được ném bởi các phiên bản Python khác nhau và các thư viện tuần tự hóa JSON.

Cần lưu ý rằng sự thành công của lời kêu gọi

>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
7 không chỉ ra sự thành công của phản hồi. Một số máy chủ có thể trả về một đối tượng JSON trong phản hồi không thành công (ví dụ: chi tiết lỗi với HTTP 500). JSON như vậy sẽ được giải mã và trả lại. Để kiểm tra xem yêu cầu có thành công không, hãy sử dụng
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
1 hoặc kiểm tra
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
2 là những gì bạn mong đợi.not indicate the success of the response. Some servers may return a JSON object in a failed response (e.g. error details with HTTP 500). Such JSON will be decoded and returned. To check that a request is successful, use
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
1 or check
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
2 is what you expect.

Nội dung phản hồi RAW

Trong trường hợp hiếm hoi mà bạn muốn nhận phản hồi ổ cắm thô từ máy chủ, bạn có thể truy cập

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
3. Nếu bạn muốn làm điều này, hãy chắc chắn rằng bạn đặt
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
4 trong yêu cầu ban đầu của bạn. Một khi bạn làm, bạn có thể làm điều này:

nodes[certname] { certname == "bastion" }
4

Tuy nhiên, nói chung, bạn nên sử dụng một mẫu như thế này để lưu những gì đang được truyền vào một tệp:

nodes[certname] { certname == "bastion" }
5

Sử dụng

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
5 sẽ xử lý rất nhiều thứ bạn sẽ phải xử lý khi sử dụng trực tiếp
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
6. Khi phát trực tuyến tải xuống, ở trên là cách ưu tiên và được khuyến nghị để truy xuất nội dung. Lưu ý rằng
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
7 có thể được điều chỉnh tự do thành một số có thể phù hợp hơn với các trường hợp sử dụng của bạn.

Ghi chú

Một lưu ý quan trọng về việc sử dụng

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
5 so với
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
6.
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
5 sẽ tự động giải mã các mã truyền chuyển
>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
4 và
>>> r = requests.put('https://httpbin.org/put', data={'key': 'value'})
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')
5.
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
6 là một luồng byte thô - nó không biến đổi nội dung phản hồi. Nếu bạn thực sự cần truy cập vào các byte khi chúng được trả lại, hãy sử dụng
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
6.

Yêu cầu bài đăng phức tạp hơn

Thông thường, bạn muốn gửi một số dữ liệu được mã hóa biểu mẫu-giống như một biểu mẫu HTML. Để làm điều này, chỉ cần chuyển một từ điển cho đối số

>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
5. Từ điển dữ liệu của bạn sẽ tự động được mã hóa mẫu khi yêu cầu được thực hiện:

nodes[certname] { certname == "bastion" }
6

Đối số

>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
5 cũng có thể có nhiều giá trị cho mỗi khóa. Điều này có thể được thực hiện bằng cách tạo
>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
5 hoặc là danh sách các bộ dữ liệu hoặc từ điển có danh sách là giá trị. Điều này đặc biệt hữu ích khi biểu mẫu có nhiều yếu tố sử dụng cùng một khóa:

nodes[certname] { certname == "bastion" }
7

Có những lúc bạn có thể muốn gửi dữ liệu không được mã hóa mẫu. Nếu bạn vượt qua

>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
8 thay vì
>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
9, dữ liệu đó sẽ được đăng trực tiếp.

Ví dụ: API V3 của GitHub chấp nhận dữ liệu bài đăng/bản vá được mã hóa JSON:

nodes[certname] { certname == "bastion" }
8

Xin lưu ý rằng mã trên sẽ không thêm tiêu đề

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
0 (vì vậy đặc biệt nó sẽ không đặt nó thành
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
1).

Nếu bạn cần bộ tiêu đề đó và bạn không muốn tự mã hóa

>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
9, bạn cũng có thể truyền trực tiếp bằng tham số
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
3 (được thêm vào phiên bản 2.4.2) và nó sẽ được mã hóa tự động:

nodes[certname] { certname == "bastion" }
9

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
0

Lưu ý, tham số

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
3 bị bỏ qua nếu
>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
5 hoặc
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
6 được thông qua.

Đăng một tập tin được mã hóa nhiều phần

Các yêu cầu làm cho việc tải lên các tệp được mã hóa nhiều phần đơn giản: đơn giản là đơn giản:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
1

Bạn có thể đặt tên tệp, content_type và tiêu đề một cách rõ ràng:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
2

Nếu bạn muốn, bạn có thể gửi chuỗi được nhận dưới dạng tệp:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
3

Trong trường hợp bạn đang đăng một tệp rất lớn dưới dạng yêu cầu

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
7, bạn có thể muốn truyền phát yêu cầu. Theo mặc định,
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
8 không hỗ trợ điều này, nhưng có một gói riêng biệt -
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
9. Bạn nên đọc tài liệu của Toolbelt, để biết thêm chi tiết về cách sử dụng nó.

Để gửi nhiều tệp trong một yêu cầu, hãy tham khảo phần nâng cao.advanced section.

Cảnh báo

Bạn nên mở các tệp ở chế độ nhị phân. Điều này là do các yêu cầu có thể cố gắng cung cấp tiêu đề

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
0 cho bạn và nếu giá trị này sẽ được đặt thành số byte trong tệp. Lỗi có thể xảy ra nếu bạn mở tệp ở chế độ văn bản.binary mode. This is because Requests may attempt to provide the
>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
0 header for you, and if it does this value will be set to the number of bytes in the file. Errors may occur if you open the file in text mode.

Mã trạng thái phản hồi

Chúng tôi có thể kiểm tra mã trạng thái phản hồi:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
4

Yêu cầu cũng đi kèm với đối tượng Tra cứu mã trạng thái tích hợp để dễ dàng tham khảo:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
5

Nếu chúng tôi đưa ra một yêu cầu xấu (lỗi máy khách 4xx hoặc phản hồi lỗi máy chủ 5xx), chúng tôi có thể nâng nó bằng

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
1:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
6

Nhưng, vì

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
2 của chúng tôi cho
>>> r = requests.get('https://api.github.com/events')
8 là
>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
4, khi chúng tôi gọi
>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
5, chúng tôi nhận được:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
7

Tất cả đều tốt.

Bánh quy¶

Nếu phản hồi chứa một số cookie, bạn có thể nhanh chóng truy cập chúng:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
8

Để gửi cookie của riêng bạn đến máy chủ, bạn có thể sử dụng tham số

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
6:

PQL parse error at line 1, column 29:

nodes[certname] { certname == "bastion" }
                            ^

Expected one of:

[
false
true
#"[0-9]+"
-
'
"
#"\s+"
9

Cookie được trả lại trong một

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
7, hoạt động giống như
>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
9 nhưng cũng cung cấp giao diện hoàn chỉnh hơn, phù hợp để sử dụng trên nhiều miền hoặc đường dẫn. Lọ cookie cũng có thể được chuyển vào các yêu cầu:

>>> r = requests.get('https://api.github.com/events')
0

Chuyển hướng và Lịch sử

Theo yêu cầu mặc định sẽ thực hiện chuyển hướng vị trí cho tất cả các động từ ngoại trừ đầu.

Chúng ta có thể sử dụng thuộc tính

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
9 của đối tượng phản hồi để theo dõi chuyển hướng.

Danh sách

nodes[certname] { certname == "bastion" }
00 chứa các đối tượng
>>> r = requests.get('https://api.github.com/events')
7 được tạo để hoàn thành yêu cầu. Danh sách được sắp xếp từ câu trả lời lâu đời nhất đến gần đây nhất.

Ví dụ: GitHub chuyển hướng tất cả các yêu cầu HTTP đến HTTPS:

>>> r = requests.get('https://api.github.com/events')
1

Nếu bạn sử dụng GET, tùy chọn, đăng, đặt, vá hoặc xóa, bạn có thể vô hiệu hóa xử lý chuyển hướng với tham số

nodes[certname] { certname == "bastion" }
02:

>>> r = requests.get('https://api.github.com/events')
2

Nếu bạn sử dụng đầu, bạn cũng có thể kích hoạt chuyển hướng:

>>> r = requests.get('https://api.github.com/events')
3

Hết thời gian

Bạn có thể nói các yêu cầu dừng chờ phản hồi sau một số giây nhất định với tham số ____10103. Gần như tất cả mã sản xuất nên sử dụng tham số này trong gần như tất cả các yêu cầu. Không làm như vậy có thể khiến chương trình của bạn treo vô thời hạn:

>>> r = requests.get('https://api.github.com/events')
4

Ghi chú

nodes[certname] { certname == "bastion" }
03 không phải là giới hạn thời gian cho toàn bộ tải xuống phản hồi; Thay vào đó, một ngoại lệ được nêu ra nếu máy chủ không đưa ra phản hồi trong
nodes[certname] { certname == "bastion" }
03 giây (chính xác hơn, nếu không có byte nào được nhận trên ổ cắm cơ bản trong
nodes[certname] { certname == "bastion" }
03 giây). Nếu không có thời gian chờ được chỉ định rõ ràng, các yêu cầu không hết thời gian.

Lỗi và ngoại lệ

Trong trường hợp có vấn đề về mạng (ví dụ: thất bại DNS, kết nối bị từ chối, v.v.), các yêu cầu sẽ tăng ngoại lệ

nodes[certname] { certname == "bastion" }
07.

>>> import requests

>>> r = requests.get('https://api.github.com/events')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
1 sẽ tăng
nodes[certname] { certname == "bastion" }
09 nếu yêu cầu HTTP trả về mã trạng thái không thành công.

Nếu một yêu cầu hết thời gian, một ngoại lệ

nodes[certname] { certname == "bastion" }
10 sẽ được nâng lên.

Nếu một yêu cầu vượt quá số lượng chuyển hướng tối đa được cấu hình, ngoại lệ

nodes[certname] { certname == "bastion" }
11 sẽ được nâng lên.

Tất cả các trường hợp ngoại lệ yêu cầu tăng rõ ràng kế thừa từ

nodes[certname] { certname == "bastion" }
12.


Sẵn sàng để biết thêm? Kiểm tra phần nâng cao.advanced section.

Nếu bạn có mặt trên thị trường việc làm, hãy xem xét việc thực hiện bài kiểm tra lập trình này. Một quyên góp đáng kể sẽ được thực hiện cho dự án này, nếu bạn tìm được một công việc thông qua nền tảng này.

Làm thế nào để Python xử lý thời gian chờ yêu cầu?

Không có thời gian chờ mặc định cho các yêu cầu Python, trừ khi được đặt rõ ràng bằng tham số thời gian chờ.Làm thế nào để bạn đặt thời gian chờ cho các yêu cầu được thực hiện trong Python?Bạn đặt thời gian chờ (tính bằng giây) bằng tham số thời gian chờ = khi thực hiện các yêu cầu HTTP trong thư viện Python Requests.using the timeout= parameter when making HTTP requests in the Python requests library.

Các tiêu đề trong các yêu cầu Python là gì?

Tên tiêu đề phải là chuỗi ANSI và các giá trị tiêu đề có thể là chuỗi, bytestring hoặc unicode.Phản hồi.Đối tượng tiêu đề chứa các tiêu đề HTTP nhận được từ máy chủ.Trong ví dụ Python yêu cầu tiêu đề, chúng tôi gửi các tiêu đề HTTP tùy chỉnh đến URL Reqbin Echo.

Yêu cầu nhận được và yêu cầu các đối tượng bài trong Python là gì?

Nhận: Để yêu cầu dữ liệu từ máy chủ.Đăng: Để gửi dữ liệu để được xử lý cho máy chủ ...
httplib..
urllib..
requests..