【问题标题】:Python3 - Requests - BS4 - Cloudflare -> 403 Forbidden not use Local ProxyPython3 - 请求 - BS4 - Cloudflare -> 403 Forbidden not use Local Proxy
【发布时间】:2020-10-02 20:28:06
【问题描述】:

代码不起作用。由于系统使用 cloudflare,出现 403 错误 当我使用任何 http 代理(burp 套件/提琴手等)时,我会看到 csrfToken。有用。 为什么使用本地代理时会起作用?

import requests
from bs4 import BeautifulSoup

headerIstek = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19041",
    "Sec-Fetch-Site" : "none",
    "Accept-Language" : "tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7"
    }
istekLazim = {"ref":"","display_type":"popup","loc":""}
istekLogin = requests.get("https://www.example.com/join/login-popup/", headers=headerIstek, cookies={"ud_rule_vars":""}, params=istekLazim, verify=False)
soup = BeautifulSoup(istekLogin.text, "html.parser")
print(istekLogin.request.headers)
csrfToken = soup.find("input", {"name":"csrfmiddlewaretoken"})["value"]
print(csrfToken)

【问题讨论】:

标签: python python-3.x beautifulsoup python-requests cloudflare


【解决方案1】:

Cloudflare 在浏览器上执行 JavaScript 检查,如果检查成功则返回会话。如果您想运行一次性脚本从受 CloudFlare 保护的服务器下载内容,请从您使用浏览器获得的先前验证的会话中添加会话 cookie。

会话 cookie 名为 __cfduid。您可以通过使用浏览器获取资源然后打开开发人员工具和网络面板来获取它。检查请求后,您可以看到浏览器发送到服务器的 cookie。

然后您可以使用该 cookie 来使用您的脚本进行请求:

cookies = {
    "__cfduid": "xd0c0985ed80ffbc4dd29d1612168766",
}
response = requests.get(image_url, cookies=cookies)
response.raise_for_status()  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 2018-04-14
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多