从帧抓取,POST请求在Python中不起作用

从帧抓取,POST请求在Python中不起作用,python,http,iframe,python-requests,Python,Http,Iframe,Python Requests,我正在做一个项目,从零件目录中获取价格。因为它使用框架,所以我一直在使用Chrome开发工具来查看发送到服务器的内容 我已经找到了获取数据的请求,但我似乎无法让它在python中工作。我还尝试通过复制cURL数据来使用Postman发出请求,但它也不起作用 这是我正在使用的代码: headers = { "Accept": "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate, br",

我正在做一个项目,从零件目录中获取价格。因为它使用框架,所以我一直在使用Chrome开发工具来查看发送到服务器的内容

我已经找到了获取数据的请求,但我似乎无法让它在python中工作。我还尝试通过复制cURL数据来使用Postman发出请求,但它也不起作用

这是我正在使用的代码:

headers = {
    "Accept": "application/json, text/plain, */*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-US,en;q=0.9",
    "Cache-control": "no-cache,no-store",
    "Connection": "keep-alive",
    "Content-Length": "205",
    "Content-Type": "application/json",
    "Cookie": "COOKIE HERE",
    "Expires": "0",
    "Host": "partscatalog.deere.com",
    "Origin": "https://partscatalog.deere.com",
    "Pragma": "no-cache",
    "Referer": "https://partscatalog.deere.com/jdrc/navigation/equipment/69779",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    "X-TS-AJAX-Request": "true"
}

payload = {'{"eq":"69779","fr":{"businessRegion":1061,"filtersEnabled":"true","encodedFilters":null,"filteringLevel":null,"currentPin":null,"equipmentRefId":"69779"},"sp":"","br":"1061","locale":"en-US","vm":"p","ln":1}'}

r = requests.post("https://partscatalog.deere.com/jdrc-services/v1/navigation/p/getChildren", headers=headers, data=payload)
print(r.content)

提前感谢

您的代码有一些问题,首先我建议您将标题替换为以下标题:

headers = {
    "Accept": "application/json, text/plain, */*",
    "Content-Type": "application/json",
    "Cookie": "COOKIE HERE",
    "Referer": "https://partscatalog.deere.com/jdrc/navigation/equipment/69779",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    "X-TS-AJAX-Request": "true"
}
然后,我还建议更换此:

r = requests.post("https://partscatalog.deere.com/jdrc-services/v1/navigation/p/getChildren", headers=headers, data=payload)
与:


希望这能起作用

有时你必须先获得普通页面才能获得新的cookie和会话ID。如果你发送
application/json
,那么你可能必须使用
json=
而不是
data=
@furas特别感谢furas,因为这是主要问题之一,我还必须对有效负载进行更改。谢谢你的帮助。它起作用了,但我不得不再做一次改变。我将有效负载中的null视为字符串,但我必须将其设置为与null、None等效的Pythons。我还必须将键“ln”和“businessRegion”的值设置为整数,而不是字符串。
r = requests.post("https://partscatalog.deere.com/jdrc-services/v1/navigation/p/getChildren", headers=headers, json=payload)