RESTful API отправлять запросы - PullRequest
0 голосов
/ 12 марта 2020

Я делаю запрос к API, я использую базовую c авторизацию, но по какой-то причине API не может декодировать строку авторизации

Вот код, который я использую:

import base64,requests
from base64 import b64encode

url = 'api.sample/test'

APIuser = b'generic_user'
APIpass = b'generic_pass'

myobj = {"data1_field":"data1"}

data_string = APIuser + b":" + APIpass
data_bytes = b64encode(data_string).decode('ascii')

head = {'Content-Type':'application/json', 'Accept':'*/*','Authorization':'Basic ' + data_bytes}

x = requests.post(url, headers=head,
        data = myobj)

print(x.text)

это ошибка, которую я получаю:

{
  "error": {
    "detail": "Cannot decode: java.io.StringReader@45fab9",
    "message": "Exception while reading request"
  },
  "status": "failure"
}

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 12 марта 2020

B64 читается как байтовые данные на python, поэтому строка будет представлена ​​как b'x ', поэтому для этого можно отправить тип шифрования в ответе, также я использовал кодировку ascii, и требуется utf8, важно не перепутать его с utf-8 (очевидно, это не то же самое для компилятора)

url = "api.sample/test"

payload = "{\"Data1\": \"Data1_field\"}

headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Basic get the string'
}

response = requests.request("POST", url, headers=headers, data = payload)

print(response.text.encode('utf8'))
...