【问题标题】:Sending Ajax request with python return 400使用python发送Ajax请求返回400
【发布时间】:2019-06-18 08:50:53
【问题描述】:

我正在尝试发送 ajax 请求并获取 json 数据,但我收到了 400 Bad request

我尝试过传递不同的标头,但还是不行

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 响应

【问题讨论】:

  • 尝试用params=data 替换data=data 然后检查。除非您描述填充 json 响应的步骤,否则不清楚您要做什么。

标签: python ajax parsing web-scraping python-requests


【解决方案1】:

如果您提供更多关于我只能猜测您正在尝试做什么的信息会有所帮助。

您可以按照 cmets 中的建议将 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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2015-12-08
    相关资源
    最近更新 更多