我在 python 中创建了一个脚本来获取发出 post http 请求的 200 状态代码,但是当我运行我的脚本时,我得到了 403 。似乎我遵循了在 chrome 开发工具中发送请求的方式。

要手动完成 - 转到该页面,选择 6 作为大小,然后点击 add to cart 按钮。

我如何使用下面的脚本做同样的事情?

Webpage address

我试过:

import requests
from bs4 import BeautifulSoup

main_url = 'https://www.footlocker.co.uk/en/homepage'
post_url = 'https://www.footlocker.co.uk/en/addtocart?'

params = {
    'SynchronizerToken': '',
    'Ajax': True,
    'Relay42_Category': 'Product Pages',
    'acctab-tabgroup-314207586604090': None,
    'Quantity_314207586604070': '1',
    'SKU': '314207586604070'
}

with requests.Session() as s:
    r = s.get(main_url)
    soup = BeautifulSoup(r.text,"lxml")

    #parsing token to reuse within data
    token = soup.select_one("[name='SynchronizerToken']")['value']

    params['SynchronizerToken'] = token

    res = s.post(post_url,params=params,data=params,headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
        'x-requested-with': 'XMLHttpRequest',
        'referer': 'https://www.footlocker.co.uk/en/p/nike-signal-dmsx-men-shoes-73190?v=314207586604',
        'accept': 'application/json, text/javascript, */*; q=0.01'
        })
    print(res.status_code)

当前状态:
403

预期状态:
200

最佳答案

我测试了你的代码并得到了 200 响应,所以我在这样的 for 循环中再次运行你的代码:

for i in range(100):
    with requests.Session() as s:
        r = s.get(main_url)

...

在第 8 个电话之后,我开始收到 403 响应(IE 权限被拒绝)。

您说您正在使用 vpn,但看起来他们要么禁止某些 vpn 提供商,要么您在没有意识到的情况下使用给定 IP 达到了请求限制。

我假设是前者,因为我使用 tor 测试了您的代码并得到了 403。

关于python - 发出发布请求时无法获得所需的响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57827402/

10-14 19:02
查看更多