- HTTP code 403 when accessing the API
- “No ‘Access-Control-Allow-Origin’ …” when the request is generated by the browser
Possible reasons:
- The request header doesn’t contain the API access key.
-
Make sure the request includes the
X-Yandex-API-Key
header with the access key you received. - The request was sent to an incorrect URL.
-
The request URL depends on the chosen rate.
For the rate:
-
“Yandex.Weather on your site” —
https://api.weather.yandex.ru/v2/informers/
. -
“Test” —
https://api.weather.yandex.ru/v2/forecast/
.
-
- The rate expired.
-
The “Test” rate is valid for 30 days. If you need to extend your use of the service under this rate, write to us.
- Request limit is exceeded.
-
The “Test” and “Yandex.Weather on your site” rates have a daily limit on the number of requests. To continue using the API, change the rate or wait for the next day.
You can see the API key value, current rate, expiration date, number of requests sent and the reason for blocking in the Keys section in the Developer Dashboard.
You can change the rate in the Finance section in the Developer Dashboard.
The Yandex.Weather API is not meant for sending requests from the user’s browser. These actions are not safe, as someone can view your API key through the browser tools.
If you need to make requests from the browser, use an intermediary server that will accept client requests, add the access key to them and send requests to the Yandex.Weather API.
I’ve installed component and using test (30-days trial) API key
I had following errors in log:
Log Details (ERROR)
Tue Feb 18 2020 14:09:24 GMT+0300 (Moscow Standard Time)
Error fetching data from Yandex.Weather, 403, Forbidden
and the second one:
Tue Feb 18 2020 14:15:36 GMT+0300 (Moscow Standard Time)
Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 424, in _async_add_entity
await entity.async_update_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 320, in _async_write_ha_state
state = self.state
File "/usr/src/homeassistant/homeassistant/components/weather/__init__.py", line 187, in state
return self.condition
File "/config/custom_components/yandex_weather/weather.py", line 168, in condition
if self._weather_data.current['condition'] in v), None)
File "/config/custom_components/yandex_weather/weather.py", line 168, in <genexpr>
if self._weather_data.current['condition'] in v), None)
KeyError: 'condition'
Could you please help me to resolve an issues?
I’m using hass.io Home Assistant 0.105.3
many thanks,
Ilya
Написал скрипт в котором асинхронная функция fetch-запросом получает от API Яндекс диска ответ в виде json, который в дальнейшем используется для перемещения по директориям и воспроизведения аудио-файлов в них. Но проблема в том, что аудио не воспроизводится… при запросе 403 ошибка. Не понимаю, что я сделал не так?
Для примера можно зайти в директорию Семейные пары
jsfiddle.net
-
Вопрос задан08 июн. 2022
-
218 просмотров
Оказывается, yandex почему-то возвращает 403, если в заголовках запроса есть параметр Referrer. Помогло добавить в html страницы:
<meta name="referrer" content="no-referrer">
После этого Referrer из запросов исчез, и всё заработало.
Пригласить эксперта
-
Показать ещё
Загружается…
31 янв. 2023, в 17:39
100000 руб./за проект
31 янв. 2023, в 17:36
30000 руб./за проект
31 янв. 2023, в 17:33
10000 руб./за проект
Минуточку внимания
Яндекс какое-то время тому назад сделал доступной нормальную настройку ключей, чтобы прописывать разрешенные IP и домены. Алилуйя!!!
Теперь можно использовать один ключ для целой группы своих сервисов, но не все так гладко получается.
Есть несколько проектов у которых не одна и не две, а больше витрин насаженных на одну админку и раскиданных по целому кусту IP адресов. Чтобы сервис карт не выдавал ошибок, в настройках ключей были прописаны необходимые IP и домены, с которых происходит обращение.
В итоге после этого при оформлении заказов (хоть в один клик, хоть через полную форму, хоть пошагово, хоть при оформлении в корзине) стали сыпаться ошибки в geocode.log такого вида
2020-04-12 13:17:34 94.25.168.65 yandexMap: {"statusCode":403,"error":"Forbidden","message":"Invalid key"} ## wa-system/file/waNet.class.php(206) #0 wa-system/file/waNet.class.php(190): waNet->onQueryComplete('{"statusCode":4...') #1 wa-system/map/adapters/yandexMap.class.php(193): waNet->query('https://geocode...', Array) #2 wa-system/map/adapters/yandexMap.class.php(125): yandexMap->sendGeoCodingRequest('/xD0/xA0/xD0/xBE/xD1/x81/xD1/x81/xD0/xB8/xD1/x8F,/xD0/x9C...') #3 wa-system/contact/waContactAddressField.class.php(83): yandexMap->geocode('/xD0/xA0/xD0/xBE/xD1/x81/xD1/x81/xD0/xB8/xD0/xB9/xD1/x81/xD0...') .... 2020-04-12 13:45:27 213.171.57.164 yandexMap: {"statusCode":403,"error":"Forbidden","message":"Invalid key"} ## wa-system/file/waNet.class.php(206) #0 wa-system/file/waNet.class.php(190): waNet->onQueryComplete('{"statusCode":4...') 2020-04-12 15:37:49 178.47.5.206 yandexMap: {"statusCode":403,"error":"Forbidden","message":"Invalid key"} ## wa-system/file/waNet.class.php(206) #0 wa-system/file/waNet.class.php(190): waNet->onQueryComplete('{"statusCode":4...') 2020-04-12 16:06:53 213.87.163.16 yandexMap: {"statusCode":403,"error":"Forbidden","message":"Invalid key"} ## wa-system/file/waNet.class.php(206) #0 wa-system/file/waNet.class.php(190): waNet->onQueryComplete('{"statusCode":4...')
После полной очистки полей в настройках ключа API ошибки в логе пропали, но в админке «неразрешенного» домена карты снова не показываются. После настройки ключа карты начинают показываться, но при оформлении заказов снова сыплются ошибки в лог.
Это Яндекс косячит или где-то в другом месте причина? Кто-нибудь сталкивался с таким, чтобы подтвердить или опровергнуть? Вдруг это вообще было временное явление?
Взаимодействие с API осуществляется по адресу:
https://fleet-api.taxi.yandex.net
Каналом передачи данных служит защищённый протокол HTTPS.
Для представления данных в теле запроса и ответа используется формат JSON.
Общие заголовки для запросов в API:
Заголовок | Описание |
---|---|
X-Client-ID |
Идентификатор клиента |
X-API-Key |
Секретный API-ключ |
Accept-Language |
Язык ответа (по умолчанию en ) |
В API используются следующие коды ответа:
Код | Причина | Описание |
---|---|---|
200 | OK | Запрос выполнен успешно |
400 | BadRequest | Некорректные параметры запроса |
401 | Unauthorized | Отсутствуют параметры авторизации |
403 | Forbidden | Не достаточно прав для выполнения запроса |
404 | NotFound | Ресурс не найден |
409 | Conflict | Операция не может быть выполнена из-за конфликта изменений |
429 | TooManyRequests | Превышены ограничения (см. ограничения ниже) |
500 | InternalServerError | Внутренняя ошибка сервера |
В API регламентирован формат неуспешных ответов на запрос:
{
"code": "необязательное поле с машиночитаемым кодом ошибки",
"message": "обязательное поле с человекочитаемым сообщением об ошибке"
}
При использовании API действуют ограничения:
-
Не более 2 запросов в секунду
-
Не более 5000 запросов в час
При превышении ограничений возвращается код 429 Too Many Requests
.
Вопросы относительно взаимодействия с API можно задать по адресу api-taxi@yandex-team.ru.