以ascii2d.net为例,详解如何绕过cloudflare反爬机制

环境:Python 3.11

使用组件:FlareSolverr、curl_cffi

目标:

  1. 获取受WAF保护的HTML文档类型资源。
  2. 获取受WAF保护的图片静态资源。

获取受WAF保护的HTML文档类型资源

一句话概括:使用FlareSolverr代理请求。

FlareSolverr提供了Windows、Linux上的可执行程序包与Docker镜像。默认在8191端口启动。以http请求的方式使用代理。例如使用httpx的情况:

response = httpx.post(
    url="http://192.168.1.20:8191/v1",
    json={
        "cmd": "request.post",
        "url": "https://ascii2d.net/search/uri",
        "postData": f"utf8=✓&uri={url}",
        "maxTimeout": 60000,
        "proxy": {"url": "http://127.0.0.1:7890"},
    },
    timeout=60
)
print(response.json()["solution"]["response"])

有关proxy的解释

FlareSolverr运行在192.168.1.20上,上述代码中的proxy设置中的127.0.0.1指的是FlareSolverr所在的服务器,即FlareSolverr向ascii2d.net发送请求时需要使用与其运行在同一设备上7890端口的代理服务,这里填写127.0.0.1:7890等同于192.168.1.20:7890。

大量请求请使用sessions,详细的使用方法参阅官方示例:https://github.com/FlareSolverr/FlareSolverr?tab=readme-ov-file#usage

获取受WAF保护的图片静态资源

WAF对静态资源的反爬机制主要为验证TLS/JA3和HTTP/2指纹,curl_cffi可模拟浏览器的指纹,从而避免请求被检测和阻止。代码如下所示:

from curl_cffi import requests

url = "https://ascii2d.net/thumbnail/c/8/6/0/c860b41bf625911cf677eaa2f4d8a4ab.jpg"
r = requests.get(url, impersonate="chrome124")
print(r.content)

这里给出使用 代理+异步+会话 获取图片字节流的示例:

from curl_cffi.requests import AsyncSession
import asyncio


async def curl_cffi_ImageBatchDownload(urls: list) -> list[bytes]:
    proxies = {"https": "http://127.0.0.1:7890"}
    async with AsyncSession(proxies=proxies) as s:
        tasks = [
            asyncio.create_task(s.get(url, impersonate="chrome124")) for url in urls
        ]
        results = await asyncio.gather(*tasks)
        return [result.content for result in results]

方法入参是存有若干个链接字符串的列表,返回值是它们对应下载的字节组成的列表。

8-10行使用列表生成式,根据每个链接创建对应的异步下载任务,tasks是下载任务组成的列表。

然后 asyncio.gather(*tasks) 异步执行tasks列表中的任务,这时从宏观角度上看,程序同时发送了若干个网络请求,并行地在下载字节流。使用await阻塞式等待所有任务执行完成,再用列表生成式取出content组成列表并返回。

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇