过5s盾(cloudflare)的各种方案

  • 1、cloudscraper 失败
 pip install cloudscraper           
  • 2、tls_client 失败
 pip install tls-client                
  • 3、 undetected-chromedriver 失败
 pip install undetected-chromedriver   
  • 4、cfscrape 失败
pip3 install cfscrape
  • 5、curl_cffi 失败
pip install curl_cffi
  • 6、远程调用

通过我构建的镜像,远程调用来获取cookies + headers,携带cooKies + headers发起get请求,即可

  • 6.1、部署镜像到服务器:

最好对容器定期重启,容器运行时间长 有效性会降低

# --port 86 暴露在容器外的端口号 --workers 20 并发数
docker run -d --restart always --network host --name cf-server uhub.service.ucloud.cn/drakespider/spider:cfserver0.29.0diy \
--host 0.0.0.0 --port 86 --workers 20
  • 6.2、确保端口可被访问,如果外域调用,需开放端口并使用公网地址
  • 6.3、对容器拉起来的web server 发起 POST请求,来获取cookies + headers
    def parse_proxy(self, proxy):
        """
        对代理格式化
        proxy: http://username:password@domain:port
        """
        if "@" in proxy:
            proxy_regex = re.match("(.+)://(.+):(.+)@(.+)", proxy)
            server = f"{proxy_regex.group(1)}://{proxy_regex.group(4)}"

            proxy_params = {
                "server": server,
                "username": proxy_regex.group(2),
                "password": proxy_regex.group(3),
            }
        else:
            proxy_params = {"server": proxy}

        return proxy_params
def get_rpc_result(self):
    resp = requests.post(
        "http://xxx:86", # rpc调用地址
        json={
            "proxy": browser_proxy,   # 支持代理方式
            "timeout": 30 * 60,      # 放弃的时间
            "url": "https://www.cloudflare.com" # 要绕过的网站
        },
        timeout=20 * 60
    )
  • 6.4、解析rpc响应结果,抽取出UA + cookies
res = self.get_rpc_result()
if res.get('success'):
    if res['cookies']:
        # {"__cf_bm": "u2nqgGBpHxg.jKrOidGVkbXqdUNor0B4VDts1dz1h4U-1708417453-1.0-AdywEwPEs3K4XFxncRtYrfP23b7nqF3ZM13fvhrgtSRYyA77aoFITGloNKgLNamkyEYc5tYaAeGH13+32YJ1a/Y=", "cf_clearance": "99EXeMZwYzCaJweUD1JxvVhSvBxqL0e60I4k_4BYJ1I-1708417456-1.0-AXnahzLUhbQgnO5LsIDomFDqRibU4icmN6/b2mLkrItzLCgEr0WpgccbOyeP2uJMWr1xuwI7MKiChMYhN/dXG2k="}
        cookies = res['cookies']
        # Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
        useragent = res['user_agent']
  • 6.5、使用 IP + UA + cookies 发起请求(三者强校验,必须一致)

用容器生成UA、cookies、和发起rpc用的代理IP,去模拟请求

def mock_req(proxy, cookies, useragent, url):
    proxies = {
        'http': proxy,
        'https': proxy
    }
    headers = {
        "Referer": "https://www.cloudflare.com", # 目标网站的地址
        'User-Agent': useragent
    }
    # 发起get请求 url:目标接口的地址
    res = requests.get(url, headers=headers, proxies=proxies, cookies=cookies)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容