无法获得期望的响应,发出发布请求

时间:2019-09-06 19:10:40

标签: python python-3.x web-scraping

我已经在python中创建了一个脚本,以获得发布后http请求的200状态代码,但是当我运行脚本时,却得到了403。看来我遵循了如何在chrome dev工具中发送请求的方式。

要手动执行-转到该页面,选择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

3 个答案:

答案 0 :(得分:3)

我测试了您的代码并得到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。

答案 1 :(得分:0)

我测试了您的代码,它可以正常工作。 收到200。

403混淆手段

Client : Give me your data
Server: Nope

如果您之前有200个状态代码,则更有可能 已被阻止。

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

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

这是您可以尝试的,

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

2。更改您的IP地址 (当然,更改的IP可以被阻止)

3。增加请求间隔

答案 2 :(得分:0)

我已经测试了您的代码,它看起来很完美。实际上,这不是您的代码的错。来自网站。测试完您的代码后,我会浏览网站并手动对其进行测试。我发现如果您连续尝试按一下disabled按钮约5至8次,则侧面将为Add to cart Add to cart按钮。因此,您需要以这种方式思考。您的代码是完美的。