发出post请求时无法获得所需的响应

2024-09-27 21:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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)

当前状态:

^{pr2}$

预期状态:

200

Tags: tohttpsimport脚本tokenurl状态www
3条回答

我已经测试过你的代码,看起来很完美。实际上,这不是你的代码的错。这是网站上的。在测试了你的代码之后,我浏览了一下网站并手动测试了它。我发现,如果你连续按5-8次,那一边就是disabledAdd to cart按钮。所以,你需要这样想。你的代码很完美。在

我测试了您的代码,得到了200个响应,所以我再次在for循环中运行您的代码,如下所示:

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

...

在第8次通话后,我开始收到403条回复(即拒绝许可)。在

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

我假设是前者,因为我用tor测试了你的代码,也得到了403。在

我测试了你的代码,它工作了。 收到200。在

403福比登是指

Client : Give me your data
Server: Nope

如果你以前有200个状态码,你更有可能 已经被封锁了。在

另一种可能是服务器端的服务逻辑已经被修改以保护自己,在这种情况下,没有人可以访问,但是服务器本身可以在内部访问。 但情况不会这样,因为我有200个。

每个服务器都有自己的策略来保护自己。 有些是暂时的,有些是永久的。在

你可以试试看

1。更改用户代理 有时服务器会阻塞某些请求过多的浏览器。使用不同浏览器的最新版本。在

2。更改您的IP (当然可以阻止更改的IP)

3。增加请求间隔

相关问题 更多 >

    热门问题