python - CloudFlare Scrape 403 禁止
问题描述
我在尝试向https://www.off---white.com/en/IT/orders/populate.json发送发布请求以将商品添加到购物车时收到“403 禁止”错误以下页面:https ://www.off---white.com/en/IT/women/products/owea143e18a640731001 。
这是我的代码:
import cfscrape
scrape = cfscrape.create_scraper()
payload = {"variant_id": "107917", "quantity": "1"}
headers={
"accept":"application/json, text/javascript, */*; q=0.01",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"content-length": "35",
"content-type": "application/json; charset=UTF-8",
"refer": "https://www.off---white.com/en/IT/women/products/owea143e18a640731001",
"origin":"https://www.off---white.com",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
"x-requested-with": "XMLHttpRequest"
}
res = scrape.post("https://www.off---white.com/en/IT/orders/populate.json",headers=headers,data=payload)
print(res.status_code) #=403 :(
谢谢你。
编辑:显然我需要饼干。我将代码更改如下,但我仍然被 403 禁止。
cookie, user_agent=scrape.get_cookie_string("https://www.off---white.com/en/IT/women/products/owea143e18a640731001")
headers={
"authority":"www.off---white.com",
"accept":"application/json, text/javascript, */*; q=0.01",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"content-length": "35",
"content-type": "application/json; charset=UTF-8",
"refer": "https://www.off---white.com/en/IT/women/products/owea143e18a640731001",
"origin":"https://www.off---white.com",
"cookie": cookie,
"user-agent": user_agent,
"x-requested-with": "XMLHttpRequest"
}
res = scrape.post("https://www.off---white.com/en/IT/orders/populate.json",headers=headers,data=payload)
关于仍然缺少什么的一些提示?
EDIT2:我还尝试了以下方法:
tokens, user_agent=scrape.get_tokens("https://www.off---white.com/en/IT/women/products/owea143e18a640731001")
headers={
"authority":"www.off---white.com",
"accept":"application/json, text/javascript, */*; q=0.01",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"content-length": "35",
"content-type": "application/json; charset=UTF-8",
"refer": "https://www.off---white.com/en/IT/women/products/owea143e18a640731001",
"origin":"https://www.off---white.com",
"user-agent": user_agent,
"x-requested-with": "XMLHttpRequest"
}
res = scrape.post("https://www.off---white.com/en/IT/orders/populate.json",headers=headers,data=payload,cookies=tokens)
再次,没有运气。此外,无论我如何提交 cookie,我注意到每当我拥有它们时,请求都会立即被拒绝,cfscrape 的 node.js 窗口甚至都不会打开。
解决方案
您确定 Content-Length 正确吗?这可能是一个问题。通常你不需要包含它,它会在以后自行添加。另一个问题很可能是 cookie。我没有看到您通过 POST 请求发回 cookie。有 2 个必需的 cookie,一个是您未发送的 _hs_session_v3。
编辑:在您的浏览器中执行此操作: 1. 获取到 off---white.com 的请求。保存所有这些cookie。2. GET 请求来自 off---white.com/en/IT/women/products/…。保存那些cookies。3. POST 请求将起作用。要对此进行测试,请执行以下操作:清除所有浏览器缓存/cookie。转到 off---white.com/en/IT/women/products/…,它甚至不加载页面.. 为什么不呢?您的 cookie 未设置。该网站正在使用您的 cookie 来确定您的请求是否有效。您正在请求一个依赖 cookie 进行有效响应的页面。
当我点击时,添加到包中,这是 curl: curl ' https://www.off---white.com/en/IT/orders/populate.json ' -H 'cookie: __cfduid=db351a20a2752d5459220f241c66440371539900632; 解雇cookie_law =真;guest_token=Im41TjNZWFBFRFFwaUdvNkpTeVJDZnci--1fca5ea27af50cba12cd96f088975f5f5e0647ac; __riskifiedBeaconSessionId=c0f01056-f52a4b5a-76f25d73-cdb11d12-c2f20dbc-8173a1e0; cf_clearance=eb87f25251aeab5062f65bc7a5261b9cbef35809-1539947407-1800-150;_hs_session_v3=UHRUWUtUVDJKTTExeEkxTVNQVlFMSVQySUR1VXlZZFJGaGZJck0zOTBPbVZSWjUvL01pR2J1UktjOXFPMTZiK2pVbm5jVGtkUU9GRVpJVGR0VWkxZGUyWGNvak5kZXllR2tEMG5yOERHMmVMaHJxaUxYRHRGVUp3NXAvZERGSm9nREZBc0Z0bDJsM241VHhzdU16S05WT3BUaFlNbVhwYkd3cGNjdHAzSHpRPS0tZ2pOR25tNzJMTWlTY3U1MDJTaW9iQT09--44bbe09a45974b9e7584588b186650946c1b6f73' -H 'origin: https://www.' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: en-US,en;q=0.9' -H 'x-requested-with: XMLHttpRequest' -H 'pragma: no-cache ' -H '用户代理:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H 'content-type: application/json; charset=UTF-8' -H '接受:应用程序/json,文本/javascript,/;q=0.01' -H '缓存控制:无缓存' -H '权限:www.off---white.com' -H '推荐人:https ://www.off---white.com/en /IT/women/products/owea143e18a640731001 ' -H 'dnt: 1' --data-binary '{"variant_id":null, "quantity":1}' --compressed
推荐阅读
- heroku - heroku cli 不是不能执行任何命令
- amazon-web-services - 在 EMR 上运行时如何指定 Spark 配置?
- python - 数据未正确抓取
- sql - 一次将多行插入两个表并在 postgres 中关联它们
- python - 在单个 GPU 上使用 Pytorch 并行化简单的 for 循环
- react-native - 关于如何处理 React Native + React Native Web Stack 的 EndToEnd 测试的建议?
- javascript - 如何从单独的域请求 JSON 数据并自己使用它
- php - 我在 php://input 函数上做错了什么?
- sql-server - 在 sql 中替代 except
- spring - 为什么我无法在构建 UI 后修改 vaadin 组件状态?