Как отправить base64 в headers
Задача: передать пользовательские данные к API. Для того чтобы это сделать, мне нужно в headers передать заголовок Authorization со значением login:password в зашифрованном Base64 RFC2045-MIME варианте.
import requests
import pybase64
login = input("Логин: ")
passwd = input("Пароль: ")
login1 = pybase64.b64encode(login.encode())
passwd2 = pybase64.b64encode(passwd.encode())
toheaders = login1,":",passwd2,
print(toheaders)
Если логин будет 1 , а пароль 2 при вводе, то данные на выводе будут: (b'MQ==', ':', b'Mg==')
То есть проблема в том, я не понимаю как мне нужно сделать, чтобы у меня выводилось просто одной строкой в формате логин:пароль. Если я в headers передам текущее значение переменной toheaders , то у меня естественно вылезет ошибка авторизации, так как он увидит и символы b', кавычки и т.д.
Вопрос номер 2:
Мне необходимо в headers передать не строку, а значение из переменой toheaders, как это правильно сделать? Сервер принимает это так: basic и логин пароль в зашифрованном виде. Как вписать этот формат в заголовок?
headers = {"Authorization" : "basic"}
response = requests.get("https://online.moysklad.ru/api/remap/1.1/report/dashboard/day", headers=headers)
if response.status_code == 401:
print ("Авторизация не прошла")
if response.ok:
print (response)
print (response.text)
Ответы (2 шт):
По вопросу 1:
toheaders = f'{login1.decode("utf-8")}:{passwd2.decode("utf-8")}'
Вам необходимо перевести байт-строки в обычные строки, после чего сконкатенировать (ну или интерполировать, как у меня в блоке кода)
Тоже озадачился. Официальная документация "Мой склад API" очень не информативна. Задал вопрос ChatGPT. Вот рабочий пример:
import requests
from requests.auth import HTTPBasicAuth
import pprint
login = '*******'
password = '********'
api_method = 'entity/invoiceout/*id счета*'
endpoint = 'https://online.moysklad.ru/api/remap/1.2/'
# Создание объекта HTTPBasicAuth с логином и паролем
auth = HTTPBasicAuth(login, password)
# Создание заголовков запроса
headers = {
'X-Lognex-Format-Millisecond': 'true',
'X-Lognex-WebHook-Disable': 'true'
}
# Отправка GET-запроса
response = requests.get(endpoint + api_method, auth=auth, headers=headers)
# Проверка статуса ответа
if response.status_code == 200:
# Доступ к данным из ответа
data = response.json()
pprint.pprint(data)
else:
print('Произошла ошибка при выполнении запроса.')