x14/proxy-checker

仅检查代理

dev-master 2024-02-24 16:42 UTC

This package is not auto-updated.

Last update: 2024-09-22 17:44:43 UTC


README

Proxy Checker 是一个 PHP 库,允许您快速检查代理列表。

  • 快速(异步请求的功劳)
  • 简单(基于 PSR-7)
  • 支持多种协议
  • 可定制(完全控制请求/响应检查)

安装

composer require retrowaver/proxy-checker

工作原理?

ProxyChecker 构造函数接受 2 个必填参数

  • PSR-7 请求
  • 实现 ResponseCheckerInterface 的对象

当调用 checkProxies() 时,它会尝试使用每个代理发送该请求,然后调用提供的 ResponseCheckerInterface 实现的 checkResponse(),最终决定代理是否有效。

根据您想要的控制程度,您可以使用内置的 ResponseCheckerBuilder 快速开始(见下文)或创建一个自定义类。

1. 基本用法

步骤 1. 创建代理数组

手动创建代理数组

use Retrowaver\ProxyChecker\Entity\Proxy;

$proxies = [
    (new Proxy)
        ->setIp('127.0.0.1')
        ->setPort(1080)
        ->setProtocol('http'),
    (new Proxy)
        ->setIp('192.168.1.1')
        ->setPort(8080)
        ->setProtocol('http')
];

... 或使用内置简单导入器

use Retrowaver\ProxyChecker\Import\SimpleImporter;

$importer = new SimpleImporter;

$lines = file('path-to-file-with-proxies.txt'); // ip:port format
$proxies = $importer->import($lines, 'http');

步骤 2. 准备请求

准备一个将被代理发送的 PSR-7 请求。

use GuzzleHttp\Psr7\Request;

$request = new Request('GET', 'http://example.com');

步骤 3. 准备 ResponseChecker

您可以使用内置 ResponseCheckerBuilder

use Retrowaver\ProxyChecker\ResponseChecker\ResponseCheckerBuilder;

$responseChecker = (new ResponseCheckerBuilder)
    ->bodyContains('some string on target website')
;

或编写自定义的 ResponseCheckerInterface 实现

use Psr\Http\Message\ResponseInterface;
use Retrowaver\ProxyChecker\Entity\ProxyInterface;

class CustomResponseChecker implements ResponseCheckerInterface
{
    public function checkResponse(
        ResponseInterface $response,
        ProxyInterface $proxy
    ): bool {
        if (...) {
            // proxy not valid
            return false;
        }

        // valid proxy
        return true;
    }
}
$responseChecker = new CustomResponseChecker;

步骤 4. 创建 ProxyChecker 并检查代理

use Retrowaver\ProxyChecker\ProxyChecker;

$proxyChecker = new ProxyChecker($request, $responseChecker);

$validProxies = $proxyChecker->checkProxies($proxies);

2. 其他信息

选项参考

ProxyChecker 接受可选参数 $options$requestOptions

  • $options
    • concurrency - 最大并发请求(默认 50)
  • $requestOptions 是传递给 Guzzle 客户端发送请求的 Guzzle 请求选项。目前只有一个默认值: 'timeout' => 20

支持的协议

PHP Proxy Checker 应该与 http、https、socks4、socks4a、socks5 和 socks5h 代理一起工作(有关描述,请参阅 https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html)。