我在 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/