Python:
Отправка HTTP-запроса с базовой аутентификацией
Как это сделать:
Вот как заставить Python общаться с сервером, используя Базовую Аутентификацию.
import requests
from requests.auth import HTTPBasicAuth
# Замените на ваши фактические учетные данные и конечную точку API, с которой вы работаете
username = 'cooluser'
password = 'supersecretpassword'
url = 'https://api.someservice.com/data'
response = requests.get(url, auth=HTTPBasicAuth(username, password))
# Посмотрите, что мы получили в ответ
print(response.status_code)
print(response.json()) # предполагая, что ответ в формате JSON
Вывод может выглядеть так, если все прошло гладко:
200
{'data': 'Ваши секретные данные!'}
Но если вы ошиблись с учетными данными:
401
Это как знак “вход воспрещен” прямо здесь.
Глубокое Погружение
Исторически, HTTP Basic Auth - это старая добрая система веб-безопасности, простой способ секретного рукопожатия с веб-сайтом. Это не очень безопасно само по себе, потому что передает учетные данные в открытом виде, просто закодированные в base64 – не зашифрованные. Всегда используйте HTTPS, чтобы учетные данные не были так же легко перехватить, как конфету у ребенка.
Существуют более безопасные альтернативы, например, Digest Access Authentication, где пароль никогда не передается открыто по сети. OAuth - еще один важный, особенно для сегодняшних API. Это больше похоже на выдачу временного VIP-пропуска, чем на показ удостоверения личности каждый раз.
Под капотом, библиотека requests
кодирует ваше имя пользователя и пароль и вставляет их в заголовок Authorization
в формате Basic base64encodedcredentials
. Сервер декодирует этот заголовок, проверяет ваши учетные данные, и если вы законный пользователь, предоставляет вам доступ.
См. Также
- Официальная документация библиотеки
requests
расскажет вам подробнее об аутентификации и многом другом: https://docs.python-requests.org/en/latest/ http.client
для тех, кто хочет обойтись без сторонней библиотеки: https://docs.python.org/3/library/http.client.html- Real Python погружается в основы HTTP и Python: https://realpython.com/python-requests/