Отправка Ajax-запроса с возвратом Python 400 - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь отправить запрос ajax и получить данные json, но вместо этого я получаю 400 Плохой запрос

Я пробовал передавать разные заголовки, но все равно не работает

import requests
import json

headers = {"Host": "www.zalando-prive.it",
           "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0",
           "Accept": "application/json, text/plain, */*",
           "Accept-Language": "en-US",
           "Accept-Encoding": "gzip, deflate, br",
           "X-Requested-With": "XMLHttpRequest",
           "Referer":"https: //www.zalando-prive.it/campaigns/ZZLPH1"
}

data = {"filter": {},
        "sort": "attractivity",
        "gender": "FEMALE",
        "page": 1}

url = "https://www.zalando-prive.it/api/campaigns/ZZLPH1/articles"
response = requests.get(url, data=data, headers=headers)
print(response.text)

Ваш браузер отправил запрос, который этот сервер не может понять, в то время как я ожидаю ответа json

1 Ответ

0 голосов
/ 18 июня 2019

Было бы полезно, если бы вы предоставили больше информации о том, что я могу только догадываться, что вы пытаетесь сделать.

Вы можете изменить data=data на params=data, как предлагается в комментариях. Однако это даст ответ в виде html, а не ответ json (что опять же, если вы предоставите больше информации, мы сможем устранить проблему).

В исходном html-коде есть ответ json, однако его необходимо извлечь с помощью некоторых манипуляций со строками, а затем декодировать. Как только это будет сделано, вы используете json.loads(), чтобы получить:

import requests
import json
from urllib.parse import unquote

headers = {"Host": "www.zalando-prive.it",
           "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0",
           "Accept": "application/json, text/plain, */*",
           "Accept-Language": "en-US",
           "Accept-Encoding": "gzip, deflate, br",
           "X-Requested-With": "XMLHttpRequest",
           "Referer":"https://www.zalando-prive.it/campaigns/ZZLPH1"
}

data = {"filter": {},
        "sort": "attractivity",
        "gender": "FEMALE",
        "page": 1}

url = "https://www.zalando-prive.it/api/campaigns/ZZLPH1/articles"
response = requests.get(url, params=data, headers=headers)
print(response.text)

jsonStr = response.text
jsonStr = jsonStr.split('data-cms-content="')[-1]
jsonStr = jsonStr.split('" data-reactroot="">')[0]

jsonData = json.loads(unquote(jsonStr))
...