Sắp xếp json trong python

Bây giờ, chúng ta có một đối tượng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 6 được gọi là >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 7. Chúng tôi có thể nhận được tất cả thông tin chúng tôi cần từ đối tượng này

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

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

Tốt đẹp? . ĐẶT, XÓA, ĐẦU và TÙY CHỌN?

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

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

Truyền tham số trong URL¶

Bạn thường muốn gửi một số loại dữ liệu trong chuỗi truy vấn của URL. Nếu bạn đang tạo URL theo cách thủ công, thì 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 dấu chấm hỏi, e. g. >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 8. Yêu cầu cho phép bạn cung cấp các đối số này dưới dạng từ điển các chuỗi, sử dụng đối số từ khóa >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 9. Ví dụ: nếu bạn muốn chuyển >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 0 và >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 1 sang >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 2, bạn sẽ sử dụng đoạn mã sau

>>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//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

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

Lưu ý rằng bất kỳ khóa từ điển nào có giá trị là >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 3 sẽ không được thêm vào chuỗi truy vấn của URL

Bạn cũng có thể chuyển danh sách các mục dưới dạng giá trị

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

Nội dung phản hồi¶

Chúng tôi có thể đọc nội dung phản hồi của máy chủ. Xem xét lại dòng thời gian GitHub

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

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

Khi bạn thực hiện một yêu cầu, Yêu cầu sẽ đưa ra các phỏng đoán có cơ sở về cách mã hóa phản hồi dựa trên các tiêu đề HTTP. Mã hóa văn bản do Yêu cầu đoán được sử dụng khi bạn truy cập >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 4. Bạn có thể tìm hiểu Yêu cầu mã hóa nào đang sử dụng và thay đổi nó bằng cách sử dụng thuộc tính >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 5

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

Nếu bạn thay đổi mã hóa, Yêu cầu sẽ sử dụng giá trị mới của >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 5 bất cứ khi nào bạn gọi >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 4. Bạn có thể muốn làm điều này trong bất kỳ tình huống nào mà 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 phần thân của chúng. Trong những tình huống như thế này, bạn nên sử dụng >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 8 để tìm mã hóa, sau đó đặt >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 5. Điều này sẽ cho phép bạn sử dụng >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 4 với mã hóa chính xác

Cá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('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 01, bạn chỉ cần sử dụng tên codec làm giá trị của >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('//httpbin.org/get', params=payload) 5 và 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 nội dung phản hồi dưới dạng byte, đối với các yêu cầu không phải văn bản

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

Mã hóa chuyển đổi >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 03 và >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 04 sẽ tự động được giải mã cho bạn

Mã hóa chuyển đổi >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 05 đượ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 một 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 đoạn mã sau

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

Nội dung phản hồi JSON¶

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

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

Trong trường hợp giải mã JSON không thành công, >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 06 sẽ đưa ra 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 chứa JSON không hợp lệ, việc cố gắng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 06 sẽ tăng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 08. Ngoại lệ trình bao bọc này cung cấp khả năng tương tác cho nhiều ngoại lệ có thể bị ném bởi các phiên bản python và thư viện tuần tự hóa json khác nhau

Cần lưu ý rằng sự thành công của cuộc gọi tới >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 06 không cho thấy 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 (e. g. chi tiết lỗi với HTTP 500). JSON như vậy sẽ được giải mã và trả về. Để kiểm tra xem yêu cầu có thành công hay không, hãy sử dụng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 20 hoặc kiểm tra >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 21 là những gì bạn mong đợi

Nội dung phản hồi thô¶

Trong trường hợp hiếm hoi mà bạn muốn nhận phản hồi socket thô từ máy chủ, bạn có thể truy cập >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 22. Nếu bạn muốn làm điều này, hãy đảm bảo rằng bạn đã đặt >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 23 trong yêu cầu ban đầu của mình. Một khi bạn làm, bạn có thể làm điều này

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

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

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

Sử dụng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 24 sẽ xử lý rất nhiều thứ mà bạn sẽ phải xử lý khi sử dụng trực tiếp >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 25. Khi phát trực tuyến nội dung tải xuống, cách trên là cách được ưu tiên và đề xuất để truy xuất nội dung. Lưu ý rằng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 26 có thể được tự do điều chỉnh 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 >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 24 so với >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 25. >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 24 sẽ tự động giải mã mã hóa chuyển đổi >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 03 và >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 04. >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 25 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 quyền truy cập vào các byte khi chúng được trả về, hãy sử dụng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 25

Tiêu đề tùy chỉnh¶

Nếu bạn muốn thêm các tiêu đề HTTP vào một yêu cầu, chỉ cần chuyển một tham số >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 34 vào tham số >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 35

Ví dụ: chúng tôi đã không chỉ định tác nhân người dùng của mình trong ví dụ trước

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

Ghi chú. Tiêu đề tùy chỉnh được ưu tiên ít hơn so với các nguồn thông tin cụ thể hơn. Ví dụ

  • Tiêu đề ủy quyền được đặt với headers= sẽ bị ghi đè nếu thông tin xác thực được chỉ định trong >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 36, do đó sẽ bị ghi đè bởi tham số >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 37. Các yêu cầu sẽ tìm kiếm tệp netrc tại ~/. netrc, ~/_netrc hoặc tại đường dẫn được chỉ định bởi biến môi trường NETRC

  • Tiêu đề ủy quyền sẽ bị xóa nếu bạn bị chuyển hướng ra khỏi máy chủ

  • Tiêu đề ủy quyền proxy sẽ bị ghi đè bởi thông tin đăng nhập proxy được cung cấp trong URL

  • Tiêu đề Độ dài nội dung sẽ bị ghi đè khi chúng tôi có thể xác định độ dài của nội dung

Hơn nữa, Yêu cầu hoàn toàn không thay đổi hành vi của nó dựa trên tiêu đề tùy chỉnh nào được chỉ định. Các tiêu đề đơn giản được chuyển vào yêu cầu cuối cùng

Ghi chú. Tất cả các giá trị tiêu đề phải là một >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 38, bytestring hoặc unicode. Trong khi được phép, bạn nên tránh chuyển các giá trị tiêu đề unicode

Yêu cầu POST 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ư biểu mẫu HTML. Để làm điều này, chỉ cần chuyển một từ điển tới đối số >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 39. Từ điển dữ liệu của bạn sẽ tự động được mã hóa theo mẫu khi có yêu cầu

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

Đối số >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 39 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 >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 39 hoặc là một danh sách các bộ dữ liệu hoặc một từ điển với cá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 phần tử sử dụng cùng một khóa

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

Đôi khi bạn có thể muốn gửi dữ liệu không được mã hóa theo mẫu. Nếu bạn vượt qua >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 38 thay vì >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 34, dữ liệu đó sẽ được đăng trực tiếp

Ví dụ: API GitHub v3 chấp nhận dữ liệu POST/PATCH được mã hóa JSON

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

Xin lưu ý rằng đoạn mã trên sẽ KHÔNG thêm tiêu đề >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 64 (vì vậy cụ thể là nó sẽ KHÔNG đặt nó thành >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 65)

Nếu bạn cần bộ tiêu đề đó và bạn không muốn tự mã hóa >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 34, bạn cũng có thể chuyển trực tiếp nó bằng tham số >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 67 (được thêm vào trong phiên bản 2. 4. 2) và nó sẽ được mã hóa tự động

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

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

Lưu ý, tham số >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 67 bị bỏ qua nếu >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 39 hoặc >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 40 được thông qua

POST một tệp được mã hóa nhiều phần¶

Yêu cầu giúp dễ dàng tải lên các tệp được mã hóa nhiều phần

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

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

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

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

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

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 >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 41, bạn có thể muốn truyền phát yêu cầu. Theo mặc định, >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 42 không hỗ trợ điều này, nhưng có một gói riêng hỗ trợ - >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 43. 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 .

Cảnh báo

Bạn nên mở tệp ở chế độ nhị phân . Điều này là do Yêu cầu có thể cố gắng cung cấp tiêu đề >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 44 cho bạn và nếu có, 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.

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

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

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

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

Nếu chúng tôi đưa ra yêu cầu không hợp lệ (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ể gửi yêu cầu đó bằng >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 45

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

Nhưng, vì >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 46 của chúng tôi cho >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 7 là >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 48, khi chúng tôi gọi >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 49, chúng tôi nhận được

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

Tất cả đều tốt

Tiêu đề phản hồi¶

Chúng ta có thể xem các tiêu đề phản hồi của máy chủ bằng từ điển Python

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

Từ điển là đặc biệt, mặc dù. nó chỉ được tạo cho các tiêu đề HTTP. Theo RFC 7230, tên Tiêu đề HTTP không phân biệt chữ hoa chữ thường

Vì vậy, chúng tôi có thể truy cập các tiêu đề bằng bất kỳ cách viết hoa nào chúng tôi muốn

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

Nó cũng đặc biệt ở chỗ máy chủ có thể đã gửi cùng một tiêu đề nhiều lần với các giá trị khác nhau, nhưng các yêu cầu kết hợp chúng để chúng có thể được biểu diễn trong từ điển trong một ánh xạ duy nhất, theo RFC 7230

Người nhận CÓ THỂ kết hợp nhiều trường tiêu đề có cùng tên trường thành một “tên trường. cặp trường-giá trị”, mà không thay đổi ngữ nghĩa của thông báo, bằng cách nối từng giá trị trường tiếp theo vào giá trị trường kết hợp theo thứ tự, được phân tách bằng dấu phẩy

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

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

Để gửi cookie của riêng bạn đến máy chủ, bạn có thể sử dụng tham số >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 800

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

Cookie được trả về trong một >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 801, hoạt động giống như một >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 34 nhưng cũng cung cấp một giao diện hoàn chỉnh hơn, phù hợp để sử dụng trên nhiều miền hoặc nhiều đường dẫn. Lọ cookie cũng có thể được chuyển vào yêu cầu

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

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

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

Chúng ta có thể sử dụng thuộc tính >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 803 của đối tượng Phản hồi để theo dõi chuyển hướng

Danh sách >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 804 chứa các đối tượng >>> r = requests.put('//httpbin.org/put', data={'key': 'value'}) >>> r = requests.delete('//httpbin.org/delete') >>> r = requests.head('//httpbin.org/get') >>> r = requests.options('//httpbin.org/get') 6 đã đượ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 cũ nhất đến câu trả lời gần đây nhất

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

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

Nếu bạn đang sử dụng GET, OPTIONS, POST, PUT, PATCH hoặc DELETE, bạn có thể tắt xử lý chuyển hướng bằng tham số >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 806

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

Nếu bạn đang sử dụng HEAD, bạn cũng có thể bật chuyển hướng

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

Hết giờ¶

Bạn có thể yêu cầu Yêu cầu dừng chờ phản hồi sau một số giây nhất định với tham số >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 807. Gần như tất cả mã sản xuất nên sử dụng tham số này trong hầu hết 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 bị treo vô thời hạn

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

Ghi chú

>>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 807 không giới hạn thời gian tải xuống toàn bộ phản hồi; . Nếu không có thời gian chờ nào được chỉ định rõ ràng, các yêu cầu sẽ không hết thời gian chờ

Lỗi và ngoại lệ¶

Trong trường hợp có sự cố mạng (e. g. Lỗi DNS, kết nối bị từ chối, v.v.), Yêu cầu sẽ tăng ngoại lệ >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 811

>>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 45 sẽ tăng >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 813 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 chờ, một ngoại lệ >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 814 sẽ được đưa ra

Nếu một yêu cầu vượt quá số lần chuyển hướng tối đa đã định cấu hình, một ngoại lệ >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 815 sẽ được đưa ra

Tất cả các ngoại lệ mà Yêu cầu tăng rõ ràng kế thừa từ >>> r = requests.post('//httpbin.org/post', data={'key': 'value'}) 816

Sẵn sàng để biết thêm? . advanced section.

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

Chủ đề