Как я могу исправить ошибку 403 в python rest api?

#python #json #api

#python #json #API

Вопрос:

У меня нет большого опыта работы с API. В настоящее время я работаю над программой на Python, используя следующий api: https://uk.api.just-eat.io/docs#section/Just-Eat-API .

Я сосредоточен на получении данных json по почтовому индексу: https://uk.api.just-eat.io/docs#operation/SearchByPostcode

 import requests
import json


response = requests.get("https://uk.api.just-eat.io/restaurants/bypostcode/NW32YT")
print(response.json())
print(response.status_code)
  

Когда я выполняю вышеуказанное, я получаю следующее сообщение:

403

 Traceback (most recent call last):
  File "/Users/mari/python/./api.py", line 7, in <module>
    print(response.json())
  File "/usr/local/lib/python3.9/site-packages/requests/models.py", line 898, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  

У меня были проблемы с получением данных json, но вчера вечером код состояния был 200, и я смог увидеть данные json с моего терминала. Я что-то упустил в своем коде? или api нестабилен?

-Заранее большое спасибо.

Комментарии:

1. Вы не отправляете никакой аутентификации и получаете 403 (запрещено).

Ответ №1:

Вам нужно добавить Authorization заголовок, как показано в документации API. Если у вас нет ключа API, вам нужно будет запросить его у них.

 PUT https://uk-partnerapi.just-eat.io/orders/abcd1234 HTTP/1.1
Authorization: JE-API-KEY abcd123456789
  

Чтобы сделать это с помощью библиотеки запросов, вы можете изменить свой запрос на

 requests.get("https://uk.api.just-eat.io/restaurants/bypostcode/NW32YT", headers={'Authorization': 'JE-API-KEY <MY_TOKEN>'})