Thư viện yêu cầu là một trong những khía cạnh quan trọng của Python để thực hiện các yêu cầu HTTP cho một URL được chỉ định. Bài viết này xoay quanh cách người ta có thể thực hiện yêu cầu bản vá cho một URL được chỉ định bằng cách sử dụng phương thức Yêu cầu.patch []. Trước khi kiểm tra phương thức vá lỗi, hãy để tìm ra yêu cầu bản vá HTTP là gì - & nbsp; & nbsp;requests.patch[] method. Before checking out the PATCH method, let’s figure out what a Http PATCH request is –
Bản vá phương pháp HTTP
Bản vá là một phương thức yêu cầu được hỗ trợ bởi HTTP được sử dụng bởi World Wide Web. Nó được sử dụng cho các khả năng sửa đổi. Yêu cầu bản vá chỉ cần chứa các thay đổi đối với tài nguyên, không phải là tài nguyên hoàn chỉnh. Điều này giống như đặt, nhưng cơ thể chứa một tập hợp các hướng dẫn mô tả cách một tài nguyên hiện đang nằm trên máy chủ nên được sửa đổi để tạo ra một phiên bản mới. Điều này có nghĩa là cơ thể bản vá không chỉ là một phần được sửa đổi của tài nguyên, mà trong một loại ngôn ngữ vá nào đó như bản vá JSON hoặc bản vá XML. Bản vá không an toàn cũng không idempotent. & Nbsp;
Cách thực hiện yêu cầu bản vá thông qua các yêu cầu Python
Mô-đun yêu cầu Python cung cấp phương thức được xây dựng được gọi là Patch [] để thực hiện yêu cầu bản vá cho một URI.Syntax-& nbsp; & nbsp;patch[] for making a PATCH request to a specified URI.
Syntax –
requests.patch[url, params={key: value}, args]
Ví dụ - & nbsp; hãy để thử thử yêu cầu API httpbin, ví dụ như mục đích. & Nbsp; & nbsp;
Let’s try making a request to httpbin’s APIs for example purposes.
Python3
>>> requests.get['//api.github.com']
6 >>> requests.get['//api.github.com']
7>>> requests.get['//api.github.com']
8>>> requests.get['//api.github.com']
9>>> requests.get['//api.github.com']
8>>> response = requests.get['//api.github.com']
1Lưu tệp này dưới dạng request.py và thông qua chạy đầu cuối, & nbsp; & nbsp;
python request.py
Đầu ra - & nbsp; & nbsp;
Khi nào nên sử dụng phương pháp vá?
Phương thức Patch là phương thức yêu cầu được hỗ trợ bởi giao thức HTTP để thực hiện các thay đổi một phần cho tài nguyên hiện có. Phương thức Patch cung cấp một thực thể chứa danh sách các thay đổi được áp dụng cho tài nguyên được yêu cầu bằng URI HTTP. Danh sách các thay đổi được cung cấp dưới dạng tài liệu bản vá. Nếu tài nguyên được yêu cầu không tồn tại thì máy chủ có thể tạo tài nguyên tùy thuộc vào loại phương tiện và quyền của tài liệu bản vá. Các thay đổi được mô tả trong tài liệu bản vá phải được xác định rõ về mặt ngữ nghĩa nhưng có thể có một loại phương tiện khác với tài nguyên được vá. Các khung như XML, JSON có thể được sử dụng để mô tả các thay đổi trong tài liệu bản vá. & NBSP;
Đặt vs patch
Sự khác biệt chính giữa phương thức PUT và Patch là phương thức PUT sử dụng URI yêu cầu để cung cấp phiên bản sửa đổi của tài nguyên được yêu cầu thay thế phiên bản gốc của tài nguyên trong khi phương thức Patch cung cấp một bộ hướng dẫn để sửa đổi tài nguyên. Nếu tài liệu bản vá lớn hơn kích thước của phiên bản mới của tài nguyên được gửi theo phương thức PUT thì phương thức PUT được ưa thích. & NBSP;
« Prev: Python: Các kiểu dữ liệu cơ bản trong Python
- » Next: Python: Bố cục PyQt: Tạo các ứng dụng GUI chuyên nghiệp
- Copied !!!
- Mục lục bài viết:
- Bắt đầu với các yêu cầu
- Yêu cầu GET
- Phản hồi
- Mã trạng thái
- Nội dung
- Tiêu đề
- Tham số chuỗi truy vấn
- Yêu cầu tiêu đề
- Các phương thức HTTP khác
- Nội dung thư
- Kiểm tra yêu cầu của bạn
- Xác thực
- Xác minh chứng chỉ SSL
- Hiệu suất
- Hết giờ
Đối tượng phiên
Số lần thử tối đa
Phần kết luận
- Các
7thư viện là tiêu chuẩn de facto cho làm các yêu cầu HTTP bằng Python. Nó tóm tắt sự phức tạp của việc thực hiện các yêu cầu đằng sau một API đẹp, đơn giản để bạn có thể tập trung vào việc tương tác với các dịch vụ và sử dụng dữ liệu trong ứng dụng của mình.>>> requests.get['//api.github.com']
- Trong suốt bài viết này, bạn sẽ thấy một số tính năng hữu ích nhất
7phải cung cấp cũng như cách tùy chỉnh và tối ưu hóa các tính năng đó cho các tình huống khác nhau mà bạn có thể gặp phải. Bạn cũng sẽ học cách sử dụng>>> requests.get['//api.github.com']
7một cách hiệu quả cũng như cách ngăn chặn các yêu cầu đến các dịch vụ bên ngoài làm chậm ứng dụng của bạn.>>> requests.get['//api.github.com']
- Trong hướng dẫn này, bạn sẽ học cách:
- Đưa ra yêu cầu bằng các phương thức HTTP phổ biến nhất
- Tùy chỉnh tiêu đề và dữ liệu yêu cầu của bạn, sử dụng chuỗi truy vấn và nội dung thư
Kiểm tra dữ liệu từ các yêu cầu và phản hồi của bạn
Thực hiện các yêu cầu đã xác thực
Định cấu hình các yêu cầu của bạn để giúp ngăn ứng dụng của bạn sao lưu hoặc làm chậm
Mặc dù tôi đã cố gắng bao gồm nhiều thông tin nhất mà bạn cần để hiểu các tính năng và ví dụ có trong bài viết này, nhưng tôi giả sử có một kiến thức chung rất cơ bản về HTTP . Điều đó nói rằng, bạn vẫn có thể làm theo tốt.
Bây giờ điều đó không còn nữa, hãy đi sâu vào và xem bạn có thể sử dụng như thế nào
>>> requests.get['//api.github.com']
7trong ứng dụng của mình!$ pipenv install requests
Bắt đầu với
>>> requests.get['//api.github.com']
7Hãy bắt đầu bằng cách cài đặt
>>> requests.get['//api.github.com']
7thư viện. Để làm như vậy, hãy chạy lệnh sau:Copied !!!
Mục lục bài viết:
Bắt đầu với các yêu cầu
Yêu cầu GET
Phản hồi
>>> requests.get['//api.github.com']
Mã trạng thái
Mục lục bài viết:
Bắt đầu với các yêu cầu
Phản hồi
>>> response = requests.get['//api.github.com']
Mã trạng thái
Bắt đầu với các yêu cầu
Yêu cầu GET
Phản hồi
Bằng cách truy cập
if response:
print['Success!']
else:
print['An error has occurred.']
1, bạn có thể thấy mã trạng thái mà máy chủ trả về:>>>
>>> response.status_code
200
if response:
print['Success!']
else:
print['An error has occurred.']
1trả về a if response:
print['Success!']
else:
print['An error has occurred.']
3, có nghĩa là yêu cầu của bạn đã thành công và máy chủ đã phản hồi với dữ liệu bạn đang yêu cầu.Đôi khi, bạn có thể muốn sử dụng thông tin này để đưa ra quyết định trong mã của mình:
if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
Với logic này, nếu máy chủ trả về
if response:
print['Success!']
else:
print['An error has occurred.']
3mã trạng thái, chương trình của bạn sẽ in if response:
print['Success!']
else:
print['An error has occurred.']
5 . Nếu kết quả là a if response:
print['Success!']
else:
print['An error has occurred.']
6, chương trình của bạn sẽ in if response:
print['Success!']
else:
print['An error has occurred.']
7.>>> requests.get['//api.github.com']
7tiến thêm một bước trong việc đơn giản hóa quy trình này cho bạn. Nếu bạn sử dụng một if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
2thể hiện trong biểu thức điều kiện, nó sẽ đánh giá import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
0xem mã trạng thái có nằm giữa if response:
print['Success!']
else:
print['An error has occurred.']
3và import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
2và import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
3nếu không.Do đó, bạn có thể đơn giản hóa ví dụ cuối cùng bằng cách viết lại
import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
4câu lệnh:if response:
print['Success!']
else:
print['An error has occurred.']
Hãy nhớ rằng phương pháp này không xác minh rằng mã trạng thái là bằng
if response:
print['Success!']
else:
print['An error has occurred.']
3. Lý do cho điều này là các mã trạng thái khác trong phạm vi if response:
print['Success!']
else:
print['An error has occurred.']
3tới import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
2, chẳng hạn như import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
8và import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
9, cũng được coi là thành công theo nghĩa là chúng cung cấp một số phản hồi khả thi.Ví dụ:
>>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
0câu trả lời cho bạn biết rằng phản hồi đã thành công, nhưng không có nội dung nào để trả lại trong nội dung thư.Vì vậy, hãy đảm bảo rằng bạn chỉ sử dụng tốc ký thuận tiện này nếu bạn muốn biết yêu cầu nói chung có thành công hay không và sau đó, nếu cần, hãy xử lý phản hồi một cách thích hợp dựa trên mã trạng thái.
Giả sử bạn không muốn kiểm tra mã trạng thái của phản hồi trong một
import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
4câu lệnh. Thay vào đó, bạn muốn đưa ra một ngoại lệ nếu yêu cầu không thành công. Bạn có thể làm điều này bằng cách sử dụng >>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
2:import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
Nếu bạn gọi
>>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
2, một >>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
4sẽ được nâng lên cho các mã trạng thái nhất định. Nếu mã trạng thái cho biết một yêu cầu thành công, chương trình sẽ tiếp tục mà không có ngoại lệ nào được nêu ra.Đọc thêm: Nếu bạn không quen thuộc với chuỗi f của Python 3.6 , tôi khuyến khích bạn tận dụng chúng vì chúng là một cách tuyệt vời để đơn giản hóa các chuỗi được định dạng của bạn.
Bây giờ, bạn đã biết rất nhiều về cách xử lý mã trạng thái của phản hồi mà bạn nhận được từ máy chủ. Tuy nhiên, khi bạn đưa ra một
>>> response.status_code
200
1yêu cầu, bạn hiếm khi chỉ quan tâm đến mã trạng thái của phản hồi. Thông thường, bạn muốn xem thêm. Tiếp theo, bạn sẽ thấy cách xem dữ liệu thực tế mà máy chủ đã gửi lại trong phần nội dung của phản hồi.Nội dung
Phản hồi của một
>>> response.status_code
200
1yêu cầu thường có một số thông tin có giá trị, được gọi là trọng tải, trong nội dung thư. Bằng cách sử dụng các thuộc tính và phương pháp của if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
2, bạn có thể xem tải trọng ở nhiều định dạng khác nhau.Để xem nội dung của phản hồi
>>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
8, bạn sử dụng >>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
9:>>>
>>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
Mặc dù
>>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
9cung cấp cho bạn quyền truy cập vào các byte thô của tải phản hồi, nhưng bạn thường sẽ muốn chuyển đổi chúng thành một chuỗi bằng cách sử dụng mã hóa ký tự như UTF-8 . if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
5sẽ làm điều đó cho bạn khi bạn truy cập python request.py02:
>>>
python request.py0
Bởi vì việc giải mã
>>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
8cho một python request.py04yêu cầu một lược đồ mã hóa,
>>> requests.get['//api.github.com']
7sẽ cố gắng đoán mã hóa dựa trên các tiêu đề của phản hồi nếu bạn không chỉ định. Bạn có thể cung cấp mã hóa rõ ràng bằng cách cài đặt python request.py06trước khi truy cập
python request.py02:
>>>
python request.py1
Nếu bạn nhìn vào phản hồi, bạn sẽ thấy rằng nó thực sự là nội dung JSON được tuần tự hóa. Để lấy từ điển, bạn có thể lấy từ điển mà
python request.py04bạn đã lấy
python request.py02và giải mã hóa nó bằng cách sử dụng
python request.py10. Tuy nhiên, một cách đơn giản hơn để thực hiện tác vụ này là sử dụng
python request.py11:
>>>
python request.py2
Các
python request.py12giá trị trả lại
python request.py11là một cuốn từ điển, vì vậy bạn có thể truy cập các giá trị trong đối tượng bằng chìa khóa.
Bạn có thể làm được nhiều điều với mã trạng thái và nội dung thư. Tuy nhiên, nếu bạn cần thêm thông tin, chẳng hạn như siêu dữ liệu về chính phản hồi, bạn sẽ cần xem xét các tiêu đề của phản hồi.
Tiêu đề
Tiêu đề phản hồi có thể cung cấp cho bạn thông tin hữu ích, chẳng hạn như loại nội dung của trọng tải phản hồi và giới hạn thời gian về thời gian lưu phản hồi vào bộ nhớ cache. Để xem các tiêu đề này, hãy truy cập
python request.py14:
>>>
python request.py3
python request.py14trả về một đối tượng giống như từ điển, cho phép bạn truy cập các giá trị tiêu đề bằng khóa. Ví dụ: để xem loại nội dung của tải phản hồi, bạn có thể truy cập
python request.py16:
>>>
python request.py4
Tuy nhiên, có điều gì đó đặc biệt về đối tượng tiêu đề giống như từ điển này. Thông số HTTP xác định các tiêu đề không phân biệt chữ hoa chữ thường, có nghĩa là chúng tôi có thể truy cập các tiêu đề này mà không cần lo lắng về cách viết hoa của chúng:
>>>
python request.py5
Cho dù bạn sử dụng chìa khóa
python request.py17hay
python request.py18, bạn sẽ nhận được giá trị như nhau.
Bây giờ, bạn đã học những điều cơ bản về
if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
2. Bạn đã thấy các thuộc tính và phương pháp hữu ích nhất của nó trong hoạt động. Hãy lùi lại một bước và xem phản hồi của bạn thay đổi như thế nào khi bạn tùy chỉnh các >>> response.status_code
200
1yêu cầu của mình.Tham số chuỗi truy vấn
Một cách phổ biến để tùy chỉnh
>>> response.status_code
200
1yêu cầu là chuyển các giá trị thông qua các tham số chuỗi truy vấn trong URL. Để làm điều này bằng cách sử dụng if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
1, bạn chuyển dữ liệu vào python request.py23. Ví dụ: bạn có thể sử dụng API Tìm kiếm của GitHub để tìm kiếm
>>> requests.get['//api.github.com']
7thư viện:python request.py6
Bằng cách chuyển từ điển
python request.py25đến
python request.py23tham số của
python request.py27, bạn có thể sửa đổi các kết quả trả về từ API Tìm kiếm.
Bạn có thể chuyển
python request.py23đến
if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
1dưới dạng một từ điển, như bạn vừa làm, hoặc dưới dạng danh sách các bộ giá trị:>>>
python request.py7
Bạn thậm chí có thể chuyển các giá trị dưới dạng
>>> response = requests.get['//api.github.com']
>>> response.content
b'{"current_user_url":"//api.github.com/user","current_user_authorizations_html_url":"//github.com/settings/connections/applications{/client_id}","authorizations_url":"//api.github.com/authorizations","code_search_url":"//api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"//api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"//api.github.com/user/emails","emojis_url":"//api.github.com/emojis","events_url":"//api.github.com/events","feeds_url":"//api.github.com/feeds","followers_url":"//api.github.com/user/followers","following_url":"//api.github.com/user/following{/target}","gists_url":"//api.github.com/gists{/gist_id}","hub_url":"//api.github.com/hub","issue_search_url":"//api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"//api.github.com/issues","keys_url":"//api.github.com/user/keys","notifications_url":"//api.github.com/notifications","organization_repositories_url":"//api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"//api.github.com/orgs/{org}","public_gists_url":"//api.github.com/gists/public","rate_limit_url":"//api.github.com/rate_limit","repository_url":"//api.github.com/repos/{owner}/{repo}","repository_search_url":"//api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"//api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"//api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"//api.github.com/gists/starred","team_url":"//api.github.com/teams","user_url":"//api.github.com/users/{user}","user_organizations_url":"//api.github.com/user/orgs","user_repositories_url":"//api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"//api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
8:>>>
python request.py8
Chuỗi truy vấn rất hữu ích cho các
>>> response.status_code
200
1yêu cầu tham số hóa . Bạn cũng có thể tùy chỉnh các yêu cầu của mình bằng cách thêm hoặc sửa đổi các tiêu đề bạn gửi.Yêu cầu tiêu đề
Để tùy chỉnh tiêu đề, bạn chuyển một từ điển tiêu đề HTTP để
if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
1sử dụng python request.py33tham số. Ví dụ: bạn có thể thay đổi yêu cầu tìm kiếm trước đó của mình để làm nổi bật các cụm từ tìm kiếm phù hợp trong kết quả bằng cách chỉ định
python request.py34loại phương tiện trong
python request.py35tiêu đề:
python request.py9
Các
python request.py35tiêu đề nói với máy chủ những loại nội dung ứng dụng của bạn có thể xử lý. Trong trường hợp này, vì bạn đang mong đợi các cụm từ tìm kiếm phù hợp được đánh dấu, bạn đang sử dụng giá trị tiêu đề
python request.py37, là
python request.py35tiêu đề GitHub độc quyền trong đó nội dung có định dạng JSON đặc biệt.
Trước khi bạn tìm hiểu thêm các cách tùy chỉnh yêu cầu, hãy mở rộng tầm nhìn bằng cách khám phá các phương thức HTTP khác.
Các phương thức HTTP khác
Bên cạnh
>>> response.status_code
200
1, phương thức HTTP phổ biến khác bao gồm >>> response.status_code
200
3, python request.py41,
python request.py42,
python request.py43,
python request.py44, và
python request.py45.
>>> requests.get['//api.github.com']
7cung cấp một phương thức, với một chữ ký tương tự if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
1, cho mỗi phương thức HTTP sau:>>>
$ pipenv install requests
0Mỗi lệnh gọi hàm thực hiện một yêu cầu tới
python request.py48dịch vụ bằng cách sử dụng phương thức HTTP tương ứng. Đối với mỗi phương pháp, bạn có thể kiểm tra phản hồi của họ giống như cách bạn đã làm trước đây:
>>>
$ pipenv install requests
1Tiêu đề, nội dung phản hồi, mã trạng thái và hơn thế nữa được trả về
if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
2cho mỗi phương thức. Tiếp theo bạn sẽ có một cái nhìn sâu hơn về các >>> response.status_code
200
3, python request.py41và
python request.py44các phương pháp và tìm hiểu cách họ khác với các loại yêu cầu khác.
Nội dung thư
Theo đặc tả HTTP,
>>> response.status_code
200
3, python request.py41, và ít phổ biến
python request.py44yêu cầu truyền dữ liệu của mình thông qua nội dung thư chứ không phải thông qua các thông số trong chuỗi truy vấn. Khi sử dụng
>>> requests.get['//api.github.com']
7, bạn sẽ chuyển tải trọng cho python request.py57tham số của hàm tương ứng .
python request.py57lấy từ điển, danh sách các bộ giá trị, byte hoặc một đối tượng giống tệp. Bạn sẽ muốn điều chỉnh dữ liệu bạn gửi trong nội dung yêu cầu của mình cho phù hợp với nhu cầu cụ thể của dịch vụ mà bạn đang tương tác.
Ví dụ: nếu loại nội dung yêu cầu của bạn là
python request.py59, bạn có thể gửi dữ liệu biểu mẫu dưới dạng từ điển:
>>>
$ pipenv install requests
2Bạn cũng có thể gửi cùng một dữ liệu đó dưới dạng danh sách các bộ giá trị:
>>>
$ pipenv install requests
3Tuy nhiên, nếu bạn cần gửi dữ liệu JSON, bạn có thể sử dụng
python request.py60tham số. Khi bạn chuyển dữ liệu JSON qua
python request.py60,
>>> requests.get['//api.github.com']
7sẽ tuần tự hóa dữ liệu của bạn và thêm python request.py16tiêu đề chính xác cho bạn.
httpbin.org là một tài nguyên tuyệt vời được tạo ra bởi tác giả của
>>> requests.get['//api.github.com']
7, Kenneth Reitz . Đó là một dịch vụ chấp nhận các yêu cầu kiểm tra và phản hồi với dữ liệu về các yêu cầu. Ví dụ: bạn có thể sử dụng nó để kiểm tra một >>> response.status_code
200
3yêu cầu cơ bản :>>>
$ pipenv install requests
4Bạn có thể thấy từ phản hồi rằng máy chủ đã nhận được dữ liệu và tiêu đề yêu cầu của bạn khi bạn gửi chúng.
>>> requests.get['//api.github.com']
7cũng cung cấp thông tin này cho bạn dưới dạng a python request.py67.
Kiểm tra yêu cầu của bạn
Khi bạn thực hiện một yêu cầu,
>>> requests.get['//api.github.com']
7thư viện sẽ chuẩn bị yêu cầu trước khi thực sự gửi nó đến máy chủ đích. Chuẩn bị yêu cầu bao gồm những thứ như xác thực tiêu đề và tuần tự hóa nội dung JSON.Bạn có thể xem
python request.py67bằng cách truy cập
python request.py70:
>>>
$ pipenv install requests
5Kiểm tra
python request.py67cung cấp cho bạn quyền truy cập vào tất cả các loại thông tin về yêu cầu đang được thực hiện như trọng tải, URL, tiêu đề, xác thực và hơn thế nữa.
Cho đến nay, bạn đã thực hiện rất nhiều loại yêu cầu khác nhau, nhưng chúng đều có một điểm chung: chúng là những yêu cầu chưa được xác thực đối với các API công khai. Nhiều dịch vụ bạn có thể gặp sẽ muốn bạn xác thực theo một cách nào đó.
Xác thực
Xác thực giúp dịch vụ hiểu bạn là ai. Thông thường, bạn cung cấp thông tin xác thực của mình cho máy chủ bằng cách chuyển dữ liệu qua
python request.py72tiêu đề hoặc tiêu đề tùy chỉnh do dịch vụ xác định. Tất cả các hàm yêu cầu mà bạn đã thấy cho đến thời điểm này đều cung cấp một tham số được gọi là
python request.py73, cho phép bạn chuyển thông tin đăng nhập của mình.
Một ví dụ về API yêu cầu xác thực là API người dùng được xác thực của GitHub . Điểm cuối này cung cấp thông tin về hồ sơ của người dùng đã được xác thực. Để thực hiện yêu cầu đối với API người dùng được xác thực, bạn có thể chuyển tên người dùng và mật khẩu GitHub của mình trong một bộ mã tới
if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
1:>>>
$ pipenv install requests
6Yêu cầu đã thành công nếu thông tin xác thực bạn đã chuyển trong tuple đến
python request.py73là hợp lệ. Nếu bạn cố gắng thực hiện yêu cầu này mà không có thông tin đăng nhập, bạn sẽ thấy rằng mã trạng thái là
python request.py76:
>>>
$ pipenv install requests
7Khi bạn chuyển tên người dùng và mật khẩu của mình trong một bộ vào
python request.py73tham số, bạn
>>> requests.get['//api.github.com']
7đang áp dụng thông tin đăng nhập bằng cách sử dụng lược đồ xác thực quyền truy cập Cơ bản của HTTP .Do đó, bạn có thể đưa ra yêu cầu tương tự bằng cách chuyển thông tin xác thực Cơ bản rõ ràng bằng cách sử dụng
python request.py79:
>>>
$ pipenv install requests
8Mặc dù bạn không cần phải xác thực rõ ràng đối với Xác thực cơ bản, nhưng bạn có thể muốn xác thực bằng một phương pháp khác.
>>> requests.get['//api.github.com']
7cung cấp các phương pháp xác thực khác như python request.py81và
python request.py82.
Bạn thậm chí có thể cung cấp cơ chế xác thực của riêng mình. Để làm như vậy, trước tiên bạn phải tạo một lớp con của
python request.py83. Sau đó, bạn triển khai
python request.py84:
$ pipenv install requests
9Tại đây,
python request.py85cơ chế tùy chỉnh của bạn nhận được mã thông báo, sau đó đưa mã thông báo đó vào
python request.py86tiêu đề yêu cầu của bạn.
Cơ chế xác thực kém có thể dẫn đến lỗ hổng bảo mật, vì vậy trừ khi một dịch vụ yêu cầu cơ chế xác thực tùy chỉnh vì lý do nào đó, bạn sẽ luôn muốn sử dụng lược đồ xác thực đã thử và đúng như Basic hoặc OAuth.
Trong khi bạn đang suy nghĩ về bảo mật, hãy xem xét xử lý Chứng chỉ SSL bằng cách sử dụng
>>> requests.get['//api.github.com']
7.Xác minh chứng chỉ SSL
Bất kỳ lúc nào dữ liệu bạn đang cố gắng gửi hoặc nhận là nhạy cảm, bảo mật là rất quan trọng. Cách bạn giao tiếp với các trang web an toàn qua HTTP là thiết lập kết nối được mã hóa bằng SSL, có nghĩa là việc xác minh Chứng chỉ SSL của máy chủ mục tiêu là rất quan trọng.
Tin tốt là nó
>>> requests.get['//api.github.com']
7làm điều này cho bạn theo mặc định. Tuy nhiên, có một số trường hợp bạn có thể muốn thay đổi hành vi này.Nếu bạn muốn tắt xác minh Chứng chỉ SSL, bạn chuyển
import requests
from requests.exceptions import HTTPError
for url in ['//api.github.com', '//api.github.com/invalid']:
try:
response = requests.get[url]
# If the response was successful, no Exception will be raised
response.raise_for_status[]
except HTTPError as http_err:
print[f'HTTP error occurred: {http_err}'] # Python 3.6
except Exception as err:
print[f'Other error occurred: {err}'] # Python 3.6
else:
print['Success!']
3đến python request.py90tham số của hàm yêu cầu:
>>>
>>> requests.get['//api.github.com']
0>>> requests.get['//api.github.com']
7 thậm chí cảnh báo bạn khi bạn đưa ra một yêu cầu không an toàn để giúp bạn giữ an toàn cho dữ liệu của mình!Lưu ý:
>>> requests.get['//api.github.com']
7sử dụng một gói được gọipython request.py93 để cung cấp cho Tổ chức phát hành chứng chỉ. Điều này cho
>>> requests.get['//api.github.com']
7biết nó có thể tin tưởng vào cơ quan nào. Do đó, bạn nên cập nhật python request.py93thường xuyên để giữ cho các kết nối của mình an toàn nhất có thể.
Hiệu suất
Khi sử dụng
>>> requests.get['//api.github.com']
7, đặc biệt là trong môi trường ứng dụng sản xuất, điều quan trọng là phải xem xét các tác động về hiệu suất. Các tính năng như kiểm soát thời gian chờ, phiên và giới hạn thử lại có thể giúp bạn giữ cho ứng dụng của mình hoạt động trơn tru.Hết giờ
Khi bạn thực hiện một yêu cầu nội tuyến đối với một dịch vụ bên ngoài, hệ thống của bạn sẽ cần phải đợi phản hồi trước khi tiếp tục. Nếu ứng dụng của bạn đợi phản hồi đó quá lâu, các yêu cầu tới dịch vụ của bạn có thể sao lưu, trải nghiệm người dùng của bạn có thể bị ảnh hưởng hoặc các công việc nền của bạn có thể bị treo.
Theo mặc định,
>>> requests.get['//api.github.com']
7sẽ đợi phản hồi vô thời hạn, vì vậy bạn hầu như luôn phải chỉ định khoảng thời gian chờ để ngăn những điều này xảy ra. Để đặt thời gian chờ của yêu cầu, hãy sử dụng python request.py98tham số.
python request.py98có thể là số nguyên hoặc số thực thể hiện số giây chờ phản hồi trước khi hết thời gian:
>>>
>>> requests.get['//api.github.com']
1Trong yêu cầu đầu tiên, yêu cầu sẽ hết thời gian chờ sau 1 giây. Trong yêu cầu thứ hai, yêu cầu sẽ hết thời gian chờ sau 3,05 giây.
Bạn cũng có thể chuyển một bộ tuple tới
python request.py98với phần tử đầu tiên là thời gian chờ kết nối [thời gian nó cho phép máy khách thiết lập kết nối với máy chủ] và phần tử thứ hai là thời gian chờ đọc [thời gian nó sẽ đợi phản hồi khi bạn khách hàng đã thiết lập kết nối]:
>>>
>>> requests.get['//api.github.com']
2Trong yêu cầu đầu tiên, yêu cầu sẽ hết thời gian chờ sau 1 giây. Trong yêu cầu thứ hai, yêu cầu sẽ hết thời gian chờ sau 3,05 giây.
>>> requests.get['//api.github.com']
3Bạn cũng có thể chuyển một bộ tuple tới
python request.py98với phần tử đầu tiên là thời gian chờ kết nối [thời gian nó cho phép máy khách thiết lập kết nối với máy chủ] và phần tử thứ hai là thời gian chờ đọc [thời gian nó sẽ đợi phản hồi khi bạn khách hàng đã thiết lập kết nối]:
Nếu yêu cầu thiết lập kết nối trong vòng 2 giây và nhận dữ liệu trong vòng 5 giây kể từ khi kết nối được thiết lập, thì phản hồi sẽ được trả về như trước đó. Nếu hết thời gian yêu cầu, thì hàm sẽ đưa ra một $ pipenv install requests
01ngoại lệ:
$ pipenv install requests
Chương trình của bạn có thể bắt được
$ pipenv install requests
01ngoại lệ và phản hồi tương ứng.Đối tượng phiên
Cho đến bây giờ, bạn đã xử lý
>>> requests.get['//api.github.com']
7các API cấp cao như if response.status_code == 200:
print['Success!']
elif response.status_code == 404:
print['Not Found.']
1và $ pipenv install requests
05. Các hàm này là những phần tóm tắt của những gì đang diễn ra khi bạn thực hiện các yêu cầu của mình. Chúng ẩn các chi tiết triển khai chẳng hạn như cách các kết nối được quản lý để bạn không phải lo lắng về chúng.>>> requests.get['//api.github.com']
4Bên dưới những phần trừu tượng đó là một lớp được gọi
$ pipenv install requests
06. Nếu bạn cần tinh chỉnh quyền kiểm soát của mình đối với cách các yêu cầu đang được thực hiện hoặc cải thiện hiệu suất của các yêu cầu, bạn có thể cần sử dụng $ pipenv install requests
06trực tiếp một phiên bản.Phiên được sử dụng để duy trì các thông số trên các yêu cầu. Ví dụ: nếu bạn muốn sử dụng cùng một xác thực cho nhiều yêu cầu, bạn có thể sử dụng một phiên:
Mỗi khi bạn thực hiện một yêu cầu $ pipenv install requests
08, khi nó đã được khởi tạo bằng thông tin xác thực, thông tin xác thực đó sẽ được duy trì.
$ pipenv install requests
Việc tối ưu hóa hiệu suất chính của các phiên ở dạng kết nối liên tục. Khi ứng dụng của bạn tạo kết nối với máy chủ bằng cách sử dụng a
$ pipenv install requests
06, ứng dụng sẽ giữ kết nối đó trong một nhóm kết nối. Khi ứng dụng của bạn muốn kết nối lại với cùng một máy chủ, ứng dụng sẽ sử dụng lại kết nối từ nhóm thay vì thiết lập một kết nối mới.Số lần thử tối đa
>>> requests.get['//api.github.com']
5Khi một yêu cầu không thành công, bạn có thể muốn ứng dụng của mình thử lại cùng một yêu cầu. Tuy nhiên,
>>> requests.get['//api.github.com']
7sẽ không làm điều này cho bạn theo mặc định. Để áp dụng chức năng này, bạn cần triển khai Bộ điều hợp truyền tải tùy chỉnh .Bộ điều hợp Giao thông cho phép bạn xác định một tập hợp các cấu hình cho mỗi dịch vụ mà bạn đang tương tác. Ví dụ: giả sử bạn muốn tất cả các yêu cầu
$ pipenv install requests
11thử lại ba lần trước khi cuối cùng tăng a $ pipenv install requests
12. Bạn sẽ xây dựng Bộ điều hợp truyền tải, đặt $ pipenv install requests
13thông số của nó và gắn nó vào một bộ điều hợp hiện có $ pipenv install requests
06:Khi bạn gắn kết $ pipenv install requests
15, $ pipenv install requests
16để $ pipenv install requests
08, $ pipenv install requests
08sẽ tuân thủ cấu hình của nó cho mỗi yêu cầu để //api.github.com.
$ pipenv install requests
$ pipenv install requests
$ pipenv install requests
$ pipenv install requests
Thời gian chờ, Bộ điều hợp truyền tải và phiên là để giữ cho mã của bạn hiệu quả và ứng dụng của bạn có khả năng phục hồi.
Phần kết luận
- Bạn đã trải qua một chặng đường dài trong việc tìm hiểu về
7thư viện mạnh mẽ của Python .>>> requests.get['//api.github.com']
- Bây giờ bạn có thể:
- Yêu cầu Make sử dụng một loạt các phương pháp HTTP khác nhau như
1,>>> response.status_code 200
3, và>>> response.status_code 200
python request.py
41 - Tùy chỉnh yêu cầu của bạn bằng cách sửa đổi tiêu đề, xác thực, chuỗi truy vấn và nội dung thư
- Kiểm tra dữ liệu bạn gửi đến máy chủ và dữ liệu máy chủ gửi lại cho bạn
Làm việc với xác minh Chứng chỉ SSL
>>> requests.get['//api.github.com']
7hiệu quả sử dụng $ pipenv install requests
13, python request.py98, phiên, và Giao thông vận tải Adapters
>>> requests.get['//api.github.com']
7, bạn được trang bị để khám phá thế giới rộng lớn của các dịch vụ web và xây dựng các ứng dụng tuyệt vời bằng cách sử dụng dữ liệu hấp dẫn mà họ cung cấp.« Prev: Python: Các kiểu dữ liệu cơ bản trong Python