碎碎念鸭鸭 https://t.me/duckduckcute
1-2K壁纸 https://t.me/pic_today
糕手爱吃多伦多 https://t.me/duoldldldldl
Flaresolverr过cloudflare.js验证的应用
#cloudflare #Flaresolverr #rss #ttrss
起因,在ttrss订阅一些网站时,有cf的人机验证。操作如下:

1.添加服务
  flaresolverr:
    image: flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    environment:
      - LOG_LEVEL=info
      - TZ=Asia/Shanghai
    ports:
      - "8191:8191"
    restart: unless-stopped

2.php中转处理
docker exec -i ttrss tee /var/www/bridge.php <<'EOF'
<?php
$url = $_GET['url'] ?? '';
if(!$url) die('No URL');

// 1. 请求 Flaresolverr
$ch = curl_init('http://flaresolverr:8191/v1');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'cmd' => 'request.get',
    'url' => $url,
    'maxTimeout' => 60000
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);

// 2. 处理结果
$json = json_decode($res, true);

if (isset($json['solution']['response'])) {
    $raw_html = $json['solution']['response'];

    // 关键修正:清洗数据
    // Flaresolverr 返回的是 Chrome 渲染后的 HTML 视图
    // 步骤 A: 去除所有 HTML 标签 (如 <html>, <pre>)
    $clean_xml = strip_tags($raw_html);
    
    // 步骤 B: 将 HTML 实体转回字符 (如 &lt; 转回 <)
    $clean_xml = html_entity_decode($clean_xml, ENT_QUOTES | ENT_XML1, 'UTF-8');

    // 步骤 C: 再次确认去除可能残留的首尾空白
    $clean_xml = trim($clean_xml);

    // 3. 输出纯净 XML
    header('Content-Type: application/xml; charset=utf-8');
    echo $clean_xml;
} else {
    // 错误处理
    header('HTTP/1.1 500 Internal Server Error');
    echo "Error: Cloudflare challenge failed or Flaresolverr error.\n";
    echo "Debug: " . substr($res, 0, 200); // 打印前200个字符用于调试
}
?>
EOF


3.使用&订阅
https://[ttrss绑定域名]/bridge.php?url=[要订阅的xml地址]
 
 
Back to Top