Эта статья является переводом, ссылка на оригиналpython-requests-library-guide
Мой блог:Дзен-мастер программирования
requestsБиблиотека используется для создания стандартных HTTP-запросов в Python. Он тезирует сложность запросов в приятное, простое API, чтобы вы могли сосредоточиться на взаимодействии с услугами и использованием данных в вашем приложении.
В этой статье вы увидитеrequests
Предлагаемые полезные функции, а также способы их настройки и оптимизации для различных ситуаций, с которыми вы можете столкнуться. Вы также узнаете, как эффективно использоватьrequests
и как предотвратить замедление работы вашего приложения при запросах к внешним службам.
В этом уроке вы узнаете, как:
- Отправляйте запросы, используя распространенные методы HTTP
- Настройте заголовки и данные вашего запроса, используя строки запроса и тела сообщений.
- Проверьте данные вашего запроса и ответа
- Отправить запрос с аутентификацией
- Настройте свои запросы, чтобы избежать блокировки или замедления вашего приложения.
Хотя я попытался включить как можно больше информации, чтобы понять функции и примеры, включенные в эту статью, чтение этой статьи требует базового понимания HTTP.
Теперь давайте углубимся в то, как использовать запросы в вашем приложении!
начать использоватьrequests
Давайте сначала установимrequests
библиотека. Для этого выполните следующую команду:
pip install requests
если вы хотите использоватьPipenvДля управления пакетами Python вы можете запустить следующие команды:
pipenv install requests
После установкиrequests
, вы можете использовать его в своем приложении. импортировать вот такrequests
:
import requests
Теперь, когда все готово, пора начинатьrequests
поездка. Ваша первая цель — научиться делать запросы GET.
ПОЛУЧИТЬ запрос
HTTP-метод(например, GET и POST) определяет, что предпринимается при выполнении HTTP-запроса. Помимо GET и POST, существуют и другие часто используемые методы, которые вы будете использовать позже в этом руководстве.
Одним из наиболее распространенных методов HTTP является GET. Метод GET означает, что вы пытаетесь получить от указанного ресурса или получить данные. Для отправки GET-запроса позвоните по телефонуrequests.get()
.
Вы можете подать заявку на GitHub следующими способамиRoot REST APIСделайте GET-запрос:
>>> requests.get('https://api.github.com')
<Response [200]>
Поздравляем! Вы сделали свой первый запрос. Далее давайте более подробно рассмотрим ответ на этот запрос.
отклик
Response
Запрос проверки является результатом сильного объекта. Давайте отправим тот же запрос еще раз, но на этот раз вернет значение, хранящееся в переменной, чтобы вы могли внимательно просмотреть ее свойства и методы:
>>> response = requests.get('https://api.github.com')
В этом примере вы захватываетеget()
Возвращаемое значение , котороеResponse
экземпляр и сохранить его в файле с именемresponse
в переменной. теперь вы можете использоватьresponse
чтобы увидеть полную информацию о результате GET-запроса.
код состояния
Ты сможешьResponse
Первая часть полученной информации — это код состояния. Код состояния показывает статус вашего запроса.
Например,200 OK
статус указывает, что ваш запрос был успешным, в то время как404 NOT FOUND
Статус указывает на то, что ресурс, который вы искали, не может быть найден. многое другоедругие коды состояния, который может предоставить вам подробную информацию о том, что произошло с вашим запросом.
посетив.status_code
, вы можете увидеть код состояния, возвращаемый сервером:
>>> response.status_code
200
.status_code
возвращение200
Означает, что ваш запрос был успешным, и сервер вернул запрошенные вами данные.
Иногда вам может понадобиться использовать эту информацию для принятия решений в вашем коде:
if response.status_code == 200:
print('Success!')
elif response.status_code == 404:
print('Not Found.')
Следуя этой логике, если сервер возвращает200
код состояния, который ваша программа напечатаетSuccess!
Если результат404
, ваша программа напечатаетNot Found.
.
requests
Еще один шаг упрощает этот процесс для вас. Если используется в условном выраженииResponse
случае, то код состояния находится между200
и400
будет рассчитываться какTrue
, в противном случаеFalse
.
Таким образом, вы можете переопределитьif
оператор для упрощения предыдущего примера:
if response:
print('Success!')
else:
print('An error has occurred.')
технические детали: так как
__ bool __()
даResponse
ВверхМетод перегрузки,следовательнопроверка правдыбыл основан.Это означает переопределение
Response
Поведение по умолчанию для учета кода состояния при определении истинности объекта.
Помните, что этот метод不会验证
Код состояния равен200
. Причина в том, что200
прибыть400
другие коды состояния в области действия, такие как204 NO CONTENT
и304 NOT MODIFIED
, также считается удачным ответом с точки зрения смысла.
Например,204
сообщает вам, что ответ был успешным, но в теле сообщения ничего не было возвращено.
Итак, обычно, если вы хотите узнать, успешно ли выполнен запрос, убедитесь, что вы используете этот простой в написании, а затем при необходимости соответствующим образом обработаете ответ в соответствии с кодом состояния.
Предположим, вы не хотите бытьif
Проверьте код состояния ответа в выписке. Вместо этого вы хотите создать исключение, если запрос не удался. ты можешь использовать.raise_for_status()
Сделай это:
import requests
from requests.exceptions import HTTPError
for url in ['https://api.github.com', 'https://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!')
если ты позвонишь.raise_for_status()
, будет повышен для определенных кодов состоянияHTTPError
аномальный. Если код состояния указывает на то, что запрос выполнен успешно, программа продолжит работу без создания исключения.
Дальше чтение: если вы не знакомы с Python 3.6f-strings, я рекомендую вам использовать их, так как это отличный способ упростить форматирование строк.
Теперь вы много знаете о том, как обрабатывать коды состояния ответов, возвращаемых сервером. Однако, когда вы делаете запрос GET, вас редко интересует только код состояния ответа. Обычно хочется увидеть больше. Далее вы увидите, как просмотреть фактические данные, возвращенные сервером, в теле ответа.
содержание ответа
GET
Ответ на запрос обычно содержит некоторую ценную информацию в теле сообщения, называемую полезной нагрузкой. использоватьResponse
свойства и методы, вы можете просматривать полезные данные в различных форматах.
бытьбайтформат для просмотра содержимого ответа, вы можете использовать.content
:
>>> response = requests.get('https://api.github.com')
>>> response.content
b'{"current_user_url":"https://api.github.com/user","current_user_authorizations_html_url":"https://github.com/settings/connections/applications{/client_id}","authorizations_url":"https://api.github.com/authorizations","code_search_url":"https://api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"https://api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"https://api.github.com/user/emails","emojis_url":"https://api.github.com/emojis","events_url":"https://api.github.com/events","feeds_url":"https://api.github.com/feeds","followers_url":"https://api.github.com/user/followers","following_url":"https://api.github.com/user/following{/target}","gists_url":"https://api.github.com/gists{/gist_id}","hub_url":"https://api.github.com/hub","issue_search_url":"https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"https://api.github.com/issues","keys_url":"https://api.github.com/user/keys","notifications_url":"https://api.github.com/notifications","organization_repositories_url":"https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"https://api.github.com/orgs/{org}","public_gists_url":"https://api.github.com/gists/public","rate_limit_url":"https://api.github.com/rate_limit","repository_url":"https://api.github.com/repos/{owner}/{repo}","repository_search_url":"https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"https://api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"https://api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"https://api.github.com/gists/starred","team_url":"https://api.github.com/teams","user_url":"https://api.github.com/users/{user}","user_organizations_url":"https://api.github.com/user/orgs","user_repositories_url":"https://api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"https://api.github.com/search/users?q={query}{&page,per_page,sort,order}"}'
Несмотря на то что.content
позволяет вам получить доступ к необработанным байтам полезной нагрузки ответа, но обычно вы хотите использоватьUTF-8и т. д. кодировка символов преобразует их внить. когда вы посещаете.text
час,response
сделает это за вас:
>>> response.text
'{"current_user_url":"https://api.github.com/user","current_user_authorizations_html_url":"https://github.com/settings/connections/applications{/client_id}","authorizations_url":"https://api.github.com/authorizations","code_search_url":"https://api.github.com/search/code?q={query}{&page,per_page,sort,order}"...}"}'
потому что правильноbytes
декодировать вstr
Требуется кодировка, поэтому, если вы ее не укажете, запрос попытается угадать кодировку на основе заголовков ответа. Вы также можете посетить.text
прошло раньше.encoding
чтобы явно установить кодировку:
>>> response.encoding = 'utf-8' # Optional: requests infers this internally
>>> response.text
'{"current_user_url":"https://api.github.com/user","current_user_authorizations_html_url":"https://github.com/settings/connections/applications{/client_id}","authorizations_url":"https://api.github.com/authorizations","code_search_url":"https://api.github.com/search/code?q={query}{&page,per_page,sort,order}"...}"}'
Если вы посмотрите на ответ, вы увидите, что он на самом деле сериализованJSON
содержание. Чтобы получить содержимое словаря, вы можете использовать.text
Получатьstr
и использоватьjson.loads()
Десериализуйте его. Однако более простой способ выполнить эту задачу — использовать.json()
:
>>> response.json()
{'current_user_url': 'https://api.github.com/user', 'current_user_authorizations_html_url': 'https://github.com/settings/connections/applications{/client_id}'...}'}
.json()
Тип возвращаемого значения — словарь, поэтому вы можете получить доступ к значениям в объекте как к парам ключ-значение.
Вы можете использовать код состояния и тело сообщения, чтобы сделать много вещей. Однако, если вам нужна дополнительная информация, такая как связаннаяresponse
Собственные метаданные, вам нужно просмотреть заголовок ответа.
заголовок ответа
Заголовки ответа могут предоставить вам полезную информацию, такую как тип содержимого полезной нагрузки ответа и лимит времени для кэширования ответа. Чтобы просмотреть эти заголовки, посетите.headers
:
>>> response.headers
{'Server': 'GitHub.com', 'Date': 'Mon, 10 Dec 2018 17:49:54 GMT', 'Content-Type': 'application/json; charset=utf-8',...}
.headers
Возвращает объект, похожий на словарь, который позволяет использовать ключ для получения значения в заголовке. Например, чтобы увидеть тип содержимого полезной нагрузки ответа, вы можете получить доступContent-Type
:
>>> response.headers['Content-Type']
'application/json; charset=utf-8'
Однако есть что-то особенное в этом головном объекте, похожем на словарь. Спецификация HTTP определяет заголовки как нечувствительные к регистру, что означает, что мы можем получить доступ к этим заголовкам, не беспокоясь об их регистре:
>>> response.headers['content-type']
'application/json; charset=utf-8'
Используете ли вы'content-type'
все еще'Content-Type'
, вы оба получите одинаковое значение.
Теперь вы узнали оResponse
базовые знания. Вы видели его наиболее полезные свойства и методы. Вернемся назад и посмотрим на настройкуGET
Как меняется ваш ответ при запросе.
параметры строки запроса
настроитьGET
Обычный способ запроса — через URL-адрес вСтрока запросаЗначение передачи параметра. нужно использоватьget()
Для этого передайте данные вparams
. Например, вы можете использовать GitHub.SearchAPI для поискаrequests
Библиотека:
import requests
# Search GitHub's repositories for requests
response = requests.get(
'https://api.github.com/search/repositories',
params={'q': 'requests+language:python'},
)
# Inspect some attributes of the `requests` repository
json_response = response.json()
repository = json_response['items'][0]
print(f'Repository name: {repository["name"]}') # Python 3.6+
print(f'Repository description: {repository["description"]}') # Python 3.6+
положив словарь{'q':'requests + language:python'}
Перейти к.get()
изparams
параметры, вы можете изменить результаты, возвращаемые API поиска.
Вы можете преобразовать его как словарь или как список кортежей по мере необходимости.params
Перейти кget()
:
>>> requests.get(
... 'https://api.github.com/search/repositories',
... params=[('q', 'requests+language:python')],
... )
<Response [200]>
Вы даже можете пройтиbytes
в качестве значения:
>>> requests.get(
... 'https://api.github.com/search/repositories',
... params=b'q=requests+language:python',
... )
<Response [200]>
Строки запроса полезны для параметризации запросов GET. Вы также можете настроить свой запрос, добавив или изменив заголовки отправленного запроса.
заголовок запроса
Чтобы настроить заголовки запроса, вы можете использоватьheaders
Параметр передает словарь заголовков HTTP вget()
. Например, вы можете пройтиAccept
Укажите тип носителя с текстовым соответствием, чтобы изменить предыдущие поисковые запросы и выделить совпадающие условия поиска в результатах:
import requests
response = requests.get(
'https://api.github.com/search/repositories',
params={'q': 'requests+language:python'},
headers={'Accept': 'application/vnd.github.v3.text-match+json'},
)
# View the new `text-matches` array which provides information
# about your search term within the results
json_response = response.json()
repository = json_response['items'][0]
print(f'Text matches: {repository["text_matches"]}')
Accept
Скажите свой сервер, какой тип приложения может быть обработан. Потому что вы хотите выделить совпадение поискового термина, он используетсяapplication / vnd.github.v3.text-match + json
, который является проприетарным GitHubAccept
Заголовок, содержимое которого находится в специальном формате JSON.
Прежде чем вы узнаете больше о способах настройки запросов, давайте расширим наши горизонты, изучив другие методы HTTP.
Другие методы HTTP
КромеGET
Кроме того, другие популярные методы HTTP включаютPOST
, ``ПОСТАВИТЬ,
DELETE,
HEAD,
PATCH和
OPTIONS。
requests为每个HTTP方法提供了一个方法,与
get()имеет аналогичную структуру:
>>> requests.post('https://httpbin.org/post', data={'key':'value'})
>>> requests.put('https://httpbin.org/put', data={'key':'value'})
>>> requests.delete('https://httpbin.org/delete')
>>> requests.head('https://httpbin.org/get')
>>> requests.patch('https://httpbin.org/patch', data={'key':'value'})
>>> requests.options('https://httpbin.org/get')
Вызовите каждую функцию, чтобы сделать запрос к службе httpbin, используя соответствующий метод HTTP. Для каждого метода вы можете просмотреть его ответ, как и раньше:
>>> response = requests.head('https://httpbin.org/get')
>>> response.headers['Content-Type']
'application/json'
>>> response = requests.delete('https://httpbin.org/delete')
>>> json_response = response.json()
>>> json_response['args']
{}
Заголовки, тело ответа, код состояния и т. д. возвращаются в ответе каждого метода. Далее вы узнаете больше оPOST
, ``ПОСТАВИТЬ和
PATCH` и узнайте, чем они отличаются от других типов запросов.
тело сообщения
Согласно спецификации HTTP,POST
,PUT
и режеPATCH
Запросы передают свои данные через тело сообщения, а не через параметры строки запроса. использоватьrequests
, вы передаете полезную нагрузку соответствующей функцииdata
параметр.
data
Принимает словарь, список кортежей, байтов или файловых объектов. Вам необходимо адаптировать данные, отправляемые в теле запроса, к конкретному формату сервиса, с которым вы взаимодействуете.
Например, если тип содержимого вашего запросаapplication / x-www-form-urlencoded
, вы можете отправить данные формы в виде словаря:
>>> requests.post('https://httpbin.org/post', data={'key':'value'})
<Response [200]>
Вы также можете отправить те же данные в виде списка кортежей:
>>> requests.post('https://httpbin.org/post', data=[('key', 'value')])
<Response [200]>
Однако, если вам нужно отправить данные JSON, вы можете использоватьjson
параметр. когда ты проходишьjson
При передаче данных JSONrequests
сериализует ваши данные и добавит правильный для васContent-Type
Заголовок
httpbin.orgдаrequests
авторKenneth ReitzОтличный ресурс создан. Это сервис, который получает тестовые запросы и отвечает данными о запросе. Например, вы можете использовать это для проверки основных запросов POST:
>>> response = requests.post('https://httpbin.org/post', json={'key':'value'})
>>> json_response = response.json()
>>> json_response['data']
'{"key": "value"}'
>>> json_response['headers']['Content-Type']
'application/json'
Из ответа видно, что сервер получил данные запроса и заголовки, когда вы отправили запрос.requests
Также кPreparedRequest
чтобы предоставить вам эту информацию.
Проверьте свой запрос
Когда вы делаете запрос,requests
Библиотека подготавливает запрос перед фактической отправкой его на целевой сервер. Подготовка запроса включает в себя такие вещи, как проверка заголовков и сериализация содержимого JSON.
вы можете посетить.request
смотретьPreparedRequest
:
>>> response = requests.post('https://httpbin.org/post', json={'key':'value'})
>>> response.request.headers['Content-Type']
'application/json'
>>> response.request.url
'https://httpbin.org/post'
>>> response.request.body
b'{"key": "value"}'
Пройден осмотрPreparedRequest
, вы можете получить доступ к различной информации о текущем запросе, такой как полезная нагрузка, URL-адрес, заголовки, аутентификация и т. д.
До сих пор вы отправляли много различных типов запросов, но все они имеют одну общую черту: это неаутентифицированные запросы к общедоступным API. Многие сервисы, с которыми вы сталкиваетесь, могут ожидать, что вы каким-то образом пройдете аутентификацию.
Аутентификация
Аутентификация помогает службам узнать, кто вы. Как правило, вы передаете данные вAuthorization
заголовки или настраиваемые заголовки, определенные службой для предоставления учетных данных серверу. Все функции запроса, которые вы здесь видите, предоставляютauth
параметр, который позволяет передавать учетные данные.
Примером API, требующего аутентификации, является GitHub.Authenticated UserAPI. Эта конечная точка предоставляет информацию о профилях пользователей, прошедших проверку подлинности. кAuthenticated User API
Чтобы сделать запрос, вы можете передать свое имя пользователя и пароль GitHub в виде кортежа вget()
:
>>> from getpass import getpass
>>> requests.get('https://api.github.com/user', auth=('username', getpass()))
<Response [200]>
Если вы передаете кортеж вauth
Если учетные данные действительны, запрос выполняется успешно. Если вы попытаетесь сделать этот запрос без учетных данных, вы увидите код состояния401 Unauthorized
:
>>> requests.get('https://api.github.com/user')
<Response [401]>
Когда вы передаете имя пользователя и пароль в виде кортежа вauth
параметр,rqeuests
Учетные данные будут применяться с использованием базовой схемы аутентификации доступа HTTP.
Поэтому вы можете использоватьHTTPBasicAuth
Передайте явные учетные данные базовой аутентификации, чтобы сделать тот же запрос:
>>> from requests.auth import HTTPBasicAuth
>>> from getpass import getpass
>>> requests.get(
... 'https://api.github.com/user',
... auth=HTTPBasicAuth('username', getpass())
... )
<Response [200]>
Хотя вам не нужно явно выполнять базовую аутентификацию, вы можете использовать другие методы аутентификации.requests
Предоставляет дополнительные методы аутентификации из коробки, такие какHTTPDigestAuth
иHTTPProxyAuth
.
Вы даже можете предоставить свой собственный механизм аутентификации. Для этого необходимо сначала создать подкласс AuthBase. Затем реализуйте__call __()
:
import requests
from requests.auth import AuthBase
class TokenAuth(AuthBase):
"""Implements a custom authentication scheme."""
def __init__(self, token):
self.token = token
def __call__(self, r):
"""Attach an API token to a custom auth header."""
r.headers['X-TokenAuth'] = f'{self.token}' # Python 3.6+
return r
requests.get('https://httpbin.org/get', auth=TokenAuth('12345abcde-token'))
Здесь вы настроеныTokenAuth
получить токен, затем в заголовке вашего запросаX-TokenAuth
Токен включен в заголовок.
Неправильный механизм аутентификации может привести к дырам в безопасности, поэтому, если сервису по какой-то причине не нужен настраиваемый механизм аутентификации, вы всегда хотите использовать что-то вродеBasic
илиOAuth
Такая проверенная схема аутентификации.
При рассмотрении вопросов безопасности давайте рассмотрим использованиеrequests
Работа с SSL-сертификатами.
Проверка SSL-сертификата
Безопасность важна, когда данные, которые вы пытаетесь отправить или получить, являются конфиденциальными. Способ безопасного взаимодействия с сайтом через HTTP заключается в установке зашифрованного соединения с использованием SSL, что означает, что очень важно проверить сертификат SSL целевого сервера.
Хорошая новостьrequests
По умолчанию это делается за вас. Однако в некоторых случаях вы можете захотеть изменить это поведение.
Если вы хотите отключить проверку сертификата SSL, добавьтеFalse
передается в функцию запросаverify
параметр:
>>> requests.get('https://api.github.com', verify=False)
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
<Response [200]>
Когда вы делаете небезопасный запрос,requests
Есть даже предупреждения, которые помогут вам сохранить ваши данные в безопасности.
представление
в настоящее время используетrequests
особенно в среде производственных приложений, важно учитывать влияние на производительность. Такие функции, как контроль тайм-аута, лимит сеансов и повторных попыток, помогут обеспечить бесперебойную работу приложения.
Контроль времени ожидания
Когда вы делаете запрос к внешней службе, система должна будет дождаться ответа, прежде чем продолжить. Если ваше приложение слишком долго ожидает ответа, запросы к вашей службе могут быть заблокированы, ваш пользовательский интерфейс может пострадать или ваши фоновые задания могут зависнуть.
по умолчанию,requests
будет ждать ответа неопределенное время, поэтому вы почти всегда должны указывать тайм-аут, чтобы предотвратить это. Чтобы установить тайм-аут для запросов, используйтеtimeout
параметр.timeout
Может быть целым числом или числом с плавающей запятой, представляющим количество секунд ожидания ответа до истечения времени ожидания:
>>> requests.get('https://api.github.com', timeout=1)
<Response [200]>
>>> requests.get('https://api.github.com', timeout=3.05)
<Response [200]>
В первом запросе запрос истечет через 1 секунду. Во втором запросе запрос истечет через 3,05 секунды.
Вы также можете передавать кортежи вtimeout
, первый элемент — это тайм-аут соединения (время, в течение которого клиент может установить соединение с сервером), а второй элемент — это тайм-аут чтения (время ожидания ответа после того, как ваш клиент установил соединение):
>>> requests.get('https://api.github.com', timeout=(2, 5))
<Response [200]>
Если запрос устанавливает соединение в течение 2 секунд и получает данные в течение 5 секунд после установления соединения, ответ будет возвращен как есть. Если время запроса истекло, функция выдастTimeout
аномальный:
import requests
from requests.exceptions import Timeout
try:
response = requests.get('https://api.github.com', timeout=1)
except Timeout:
print('The request timed out')
else:
print('The request did not time out')
ваша программа может захватитьTimeout
исключение и реагировать соответственно.
Объект сеанса
До сих пор вы имели дело с высокоуровневыми API запросов, такими какget()
иpost()
. Эти функции являются абстракциями того, что происходит, когда вы делаете запрос. Они скрывают детали реализации, такие как управление соединениями, поэтому вам не нужно о них беспокоиться.
Под этими абстракциямиSession
тип. Если вам нужно настроить способ управления вашими запросами или повысить производительность ваших запросов, вы можете использоватьSession
пример.
Session
Используется для сохранения параметров между запросами. Например, если вы хотите использовать одну и ту же аутентификацию для нескольких запросов, вы можете использоватьsession
:
import requests
from getpass import getpass
# By using a context manager, you can ensure the resources used by
# the session will be released after use
with requests.Session() as session:
session.auth = ('username', getpass())
# Instead of requests.get(), you'll use session.get()
response = session.get('https://api.github.com/user')
# You can inspect the response just like you did before
print(response.headers)
print(response.json())
каждое использованиеsession
Сделан запрос, после инициализации с использованием учетных данных аутентификации учетные данные будут сохранены.
session
Основная оптимизация производительности достигается за счет постоянных соединений. когда ваше приложение используетSession
Когда соединение с сервером установлено, оно сохраняется в пуле соединений. Когда ваше приложение снова захочет подключиться к тому же серверу, оно будет повторно использовать соединение из пула вместо создания нового.
максимальное количество попыток
Когда запрос не удается, вы можете захотеть ваше приложение, чтобы повторить тот же запрос. Однако по умолчанию,requests
Не будет этого делать. Чтобы применить эту функцию, вам необходимо реализовать пользовательскийTransport Adapter.
пройти черезTransport Adapters
, вы можете определить набор конфигураций для каждой службы, с которой вы взаимодействуете. Например, допустим, вы хотите, чтобы все запросы к https://api.github.com выводились в концеConnectionError
Повторите попытку три раза до этого. вы построитеTransport Adapter
, установите егоmax_retries
параметр и загрузить его в существующийSession
:
import requests
from requests.adapters import HTTPAdapter
from requests.exceptions import ConnectionError
github_adapter = HTTPAdapter(max_retries=3)
session = requests.Session()
# Use `github_adapter` for all requests to endpoints that start with this URL
session.mount('https://api.github.com', github_adapter)
try:
session.get('https://api.github.com')
except ConnectionError as ce:
print(ce)
когда ты будешьHTTPAdapter(github_adapter)
подняться наsession
час,session
Будет следовать его конфигурации для каждого запроса на https://api.github.com.
Timeouts
,Transport Adapters
иSessions
Используется для обеспечения эффективности кода и надежности приложения.
Суммировать
Мощный в изучении Pythonrequests
Что касается библиотек, вы прошли долгий путь.
Ты можешь сейчас:
- Делайте запросы, используя различные методы HTTP, такие как GET, POST и PUT.
- Настройте свой запрос, изменив заголовки запроса, аутентификацию, строки запроса и тело сообщения.
- Проверьте данные, отправленные на сервер, и данные, которые сервер отправляет вам обратно.
- Аутентификация с использованием SSL-сертификата
- эффективное использование
requests
используяmax_retries
,timeout
,Sessions
иTransport Adapters
потому что ты научился пользоватьсяrequests
, так что вы можете использовать потрясающие данные, которые они предоставляют, для изучения огромного мира веб-сервисов и создания отличных приложений.
Подпишитесь на официальный аккаунт , чтобы узнать больше иностранных высококачественных технических статей.