kyranrana/cloudflare-bypass

该软件包已被弃用且不再维护。未建议替代软件包。

一个帮助绕过 Cloudflare UAM 页面的库。

3.4.0 2020-03-24 20:16 UTC

This package is auto-updated.

Last update: 2020-09-07 15:41:43 UTC


README

不幸的是,Cloudflare 正在实施的新更改在 PHP 中将无法实现和维护。因此,我不得不说,这个项目将被存档。Cloudflare 玩得真好。

Cloudflare Bypass

CI

一个新的改进的 PHP 库,使用 cURL 绕过 Cloudflare IUAM 页面。

安装

使用 composer

composer require kyranrana/cloudflare-bypass

使用 cURL 的用法

使用 cURL 如常,但不是使用 curl_exec 来执行请求,我们提供了一个名为 CFCurlImpl 的类。 CFCurlImpl 提供一个 exec 方法,它接受您的 cURL 处理并执行它 - 如果出现 IUAM 页面,则处理该页面。

方法定义

CFCurlImpl->exec(resource $curlHandle, UAMOptions $uamOptions)

示例

<?php
use CloudflareBypass\CFCurlImpl;
use CloudflareBypass\Model\UAMOptions;

/*
 * Prerequisites
 *
 * Set the following request headers:
 *
 * - Upgrade-Insecure-Requests
 * - User-Agent
 * - Accept
 * - Accept-Language
 *
 * Set the following options:
 *
 * - CURLINFO_HEADER_OUT    true
 * - CURLOPT_VERBOSE        false
 *
 */
$url = "https://predb.me/?search=720p";
$ch = curl_init($url);

// Want to cache clearance cookies ?
//curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
//curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
    array(
        "Upgrade-Insecure-Requests: 1",
        "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
        "Accept-Language: en-US,en;q=0.9"
    ));

$cfCurl = new CFCurlImpl();

$cfOptions = new UAMOptions();
$cfOptions->setVerbose(true);
// $cfOptions->setDelay(5);

try {
    $page = $cfCurl->exec($ch, $cfOptions);

    // Want to get clearance cookies ?
    //$cookies = curl_getinfo($ch, CURLINFO_COOKIELIST);

} catch (ErrorException $ex) {
    echo "Unknown error -> " . $ex->getMessage();
}