Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法获得发出post请求的所需响应_Python_Python 3.x_Web Scraping - Fatal编程技术网

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

Python 无法获得发出post请求的所需响应,python,python-3.x,web-scraping,Python,Python 3.x,Web Scraping,我用python创建了一个脚本,以获得发出post http请求的200状态代码,但当我运行脚本时,我得到的是403。我似乎遵循了在chrome开发工具中发送请求的方式 要手动操作-转到该页面,选择6作为大小,然后点击添加到购物车按钮 如何使用下面的脚本执行相同操作? 我试过: import requests from bs4 import BeautifulSoup main_url = 'https://www.footlocker.co.uk/en/homepage' post_url

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

要手动操作-转到该页面,选择
6
作为大小,然后点击
添加到购物车
按钮

如何使用下面的脚本执行相同操作?

我试过:

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条回复(即拒绝许可)

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


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

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

403福比登的意思是

Client : Give me your data
Server: Nope
如果您以前有200个状态代码,则更有可能 已经被封锁了

另一种可能性是,服务器端服务逻辑已被修改以保护自身,在这种情况下,没有人可以访问,但服务器本身可以在内部访问。 但情况并非如此,因为我得到了200英镑。

每台服务器都有自己的保护策略。 有些街区是暂时的,有些街区是永久的

这是你可以尝试的

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

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


3。增加您的请求间隔

我已经测试了您的代码,它看起来非常完美。事实上,这不是你的代码的错。这是网站上的。在测试了你的代码之后,我浏览了网站并手动测试了它。我发现,如果您连续尝试点击
添加到购物车
按钮5-8次左右,侧面将被禁用。所以,你需要这样想。您的代码非常完美。

我运行了您的代码,得到了200状态代码。此外,403状态码是禁止的,因此您的ip可能会因为一些原因(太多请求等)而被临时阻止!!我使用vpn,我轮流使用它们。此外,我在其他地方测试它,但状态始终为403。谢谢.@robots.txt他们可能正在阻止您的vpn提供商或有某种请求限制。我尝试了你的代码,也得到了200分。我测试了OP的代码,第一次尝试时收到了403分,所以OP的IP地址不太可能被阻止。@Lifeiscomplex我假设你使用家庭IP地址进行了测试,并且你住在美国?你第一次得到403分与我的答案相反。。。