Flaresolverr过cloudflare.js验证的应用
#cloudflare #Flaresolverr #rss #ttrss
起因,在ttrss订阅一些网站时,有cf的人机验证。操作如下:
1.添加服务
2.php中转处理
3.使用&订阅
#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-stopped2.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 实体转回字符 (如 < 转回 <)
$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个字符用于调试
}
?>
EOF3.使用&订阅
https://[ttrss绑定域名]/bridge.php?url=[要订阅的xml地址]