cloakings/cloakings-common

Cloakings通用库

1.5.0 2024-06-26 15:59 UTC

This package is auto-updated.

Last update: 2024-09-26 16:31:52 UTC


README

检测用户是否为机器人或真实用户。

安装

composer require cloakings/cloakings-common

使用

基本使用

如果有一个库符合您的需求并且实现了 CloakerInterface - 使用它。

use Cloakings\CloakingsCommon\CloakerFactory;
use Cloakings\CloakingsCommon\CloakModeEnum;
use Cloakings\CloakingsCommon\SampleCloaker;

$cloaker = new SampleCloaker();
// or
$cloaker = (new CloakerFactory())->create(SampleCloaker::class);

$result = $cloaker->handle(new Request(server: ['HTTP_USER_AGENT' => 'Chrome 100']));
// $result->mode === CloakModeEnum::Real
// show real site

$result = $cloaker->handle(new Request(server: ['HTTP_USER_AGENT' => 'GoogleBot', 'REMOTE_ADDR' => '8.8.8.8']));
// $result->mode === CloakModeEnum::Fake
// show fake site

$result = $cloaker->handle(new Request(server: ['HTTP_USER_AGENT' => 'GoogleBot', 'REMOTE_ADDR' => '11.22.33.44']));
// $result->mode === CloakModeEnum::Response
// stop and show this response

$result = $cloaker->handle(new Request()); // no user agent
// $result->mode === CloakModeEnum::Error
// decide by yourself: may be show default (fake or real) site, may be try chaining decision to another cloaker

链式调用

如果您想让访客通过多个遮蔽器,则使用 ChainCloaker

use Cloakings\CloakingsCommon\AlwaysRealCloaker;
use Cloakings\CloakingsCommon\CloakerFactory;
use Cloakings\CloakingsCommon\SampleCloaker;

$cloaker = (new CloakerFactory())->createChain([
    AlwaysRealCloaker::class,
    SampleCloaker::class,
]);

逻辑

  • 如果遮蔽器说 "假" - 停止并返回 "假"
  • 如果遮蔽器说 "响应" - 停止并返回 "响应"
  • 如果遮蔽器说 "真实" - 继续到下一个遮蔽器;返回最后的 "真实" 响应
  • 如果遮蔽器说 "错误" - 继续到下一个遮蔽器;返回最后的 "真实" 响应;如果所有遮蔽器都返回 "错误" 则返回最后的 "错误"

创建自己的遮蔽器

实现 CloakerInterface

返回 模式

  • "真实":看起来访客是真实的人类用户
  • "假":看起来访客是机器人用户
  • "响应":不显示假或真实站点,而是此响应:通常用于额外检查的临时页面,如验证码或JS挑战
  • "错误":无法决定

返回 响应:仅在 "响应" 或 "错误" 模式下使用

返回 概率:你有多确定 0.0 - 1.0。如果您有多个遮蔽器,一个说 "真实",另一个说 "假",并且您想决定。通常只需保留默认值 1.0