Python получает запросы на API URL возвращает ошибку 422, но в браузере проблем нет.Потенциальная проблема работника службы? - PullRequest
0 голосов
/ 13 декабря 2018

Я заметил, что для URL-адресов API некоторых веб-сайтов возврат через браузер осуществляется через сервисного работника, что вызвало проблемы с очисткой этих API.

Обратите внимание на следующее:

https://www.sephora.co.id/api/v2.3/products?filter[category]=makeup/face/bronzer&page[size]=30&page[number]=1&sort=sales&include=variants,brand

Данные отображаются при вставке URL-адреса в браузер Однако это выдает ошибку 422, когда я пытаюсь автоматизировать сбор этих данных в Python с помощью следующего кода:

import requests

#API url
url = 'https://www.sephora.co.id/api/v2.3/products?filter[category]=makeup/face/bronzer&page[size]=30&page[number]=1&sort=sales&include=variants,brand'

#The response is always 422
response = requests.get(url)

Я заметил, что при вызове URL-адреса API в браузере возвращается ответ через службуработник.Поэтому мои вопросы, есть ли способ получить ответ 200 через библиотеку запросов Python?

1 Ответ

0 голосов
/ 13 декабря 2018

Похоже, что серверу требуется заголовок Accept-Language.
Код ниже теперь возвращает 200.

import requests

url = 'https://www.sephora.co.id/api/v2.3/products?filter[category]=makeup/face/bronzer&page[size]=30&page[number]=1&sort=sales&include=variants,brand'

headers = {'Accept-Language': 'en-gb'}
response = requests.get(url, headers=headers)

(Проверяется путем проверки успешного запроса через браузер, добавления всех заголовков как естьна запрос Python, а затем удаляя по одному.)

Headers from Safari webdev tools

...