PHPackages                             cosmologist/proxy-manager-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. cosmologist/proxy-manager-bundle

AbandonedArchivedLibrary[Utility &amp; Helpers](/categories/utility)

cosmologist/proxy-manager-bundle
================================

Proxy Manager Bundle

11041PHP

Since Apr 13Pushed 11y ago1 watchersCompare

[ Source](https://github.com/Cosmologist/ProxyManagerBundle)[ Packagist](https://packagist.org/packages/cosmologist/proxy-manager-bundle)[ RSS](/packages/cosmologist-proxy-manager-bundle/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

ProxyManagerBundle
==================

[](#proxymanagerbundle)

Менеджер для контроля за использованием прокси-серверов.

Менеджер позволяет обеспечить задержку между использованием каждого прокси, а также отслеживать сервера, которые перестали работать.

Менеджер можно использовать как обычную библиотеку, так и как бандл для Symfony.

Установка
---------

[](#установка)

Для установки нужно использовать composer:

```
composer require "cosmologist/proxy-manager-bundle" "dev-master"

```

Простой пример использования
----------------------------

[](#простой-пример-использования)

```
// Список серверов
$proxies = [
	'1.1.1.1:80',
    '2.2.2.2:8080'
];

// Сколько ждать секунд перед повторным использование прокси
$minAccessPeriod = 2;

// Через сколько неудачных попыток считаем прокси нерабочим
$maxFailedAccessCount = 2;

$proxyManager = new Cosmologist\ProxyManagerBundle\Service($proxies, $minAccessPeriod, $maxFailedAccessCount);

// Если менеджер используется в виде бандла в Symfony-приложении, то можно использовать соответствующий сервис
// $this->proxyManager = $this->getContainer()->get('cosmologist.proxy_manager');
// $this->proxyManager->setProxies($proxies);
// $this->proxyManager->setMinAccessPeriod($minAccessPeriod);
// $this->proxyManager->setMaxFailedAccessCount($maxFailedAccessCount);

try {
	$proxy = $proxyManager->getProxy();

    // Получаем адрес прокси-сервера
    $proxyAddress = $proxy->getAddress();

    // Что-то делаем через прокси, к примеру, скачиваем страницу
    ...

    // Если результат скачивания неудачный, фиксируем, что для данного прокси была неудачная попытка
    $proxy->increaseFailedAttemptsCount();

} catch (ProxiesEndedException $e) {
	echo 'Нет доступных для использования прокси-серверов';
}
```

Пример многопоточного скачивание сайта с использованием списка прокси-серверов
------------------------------------------------------------------------------

[](#пример-многопоточного-скачивание-сайта-с-использованием-списка-прокси-серверов)

Если вам требуется выкачать большое количество файлов или страниц с определенного сайта - будьте готовы к тому, что администраторы ресурса могут заблокировать доступ, при большом количестве запросов или при слишком частых запросов с одного IP-адреса. Для обхода таких блокировок пригодится ProxyManagerBundle, который позволит обращаться к ресурсу через каждый прокси-сервер с заданной периодичностью, а также отслеживать прокси, которые перестали работать. Для ускорения скачивания будем скачивать в несколько потоков, для этого можно использовать популярную библиотеку [Guzzle](https://github.com/guzzle/guzzle).

```
$guzzle = new GuzzleHttp\Client();

// Список серверов
$proxies = [
	'1.1.1.1:80',
    '2.2.2.2:8080'
];

$proxyManager = new Cosmologist\ProxyManagerBundle\Service($proxies);

// Нельзя использовать переменную c именем $this в блоке use анонимной функции
$that = $this;

// Настройки пула для Guzzle
$options = [
    'before' => function (BeforeEvent $event) use ($proxyManager) {

        $proxy = $proxyManager->getProxy()->getAddress();
        $event->getRequest()->getConfig()->set('proxy', $proxy);

        echo sprintf("Set proxy %s for %s\n", $proxy, $event->getRequest()->getUrl());
    },
    'complete' => function (CompleteEvent $event) use ($that) {
        echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";

        $that->parsePage($event->getResponse());
    },
    'error' => function (ErrorEvent $event) use ($proxyManager) {
        $proxyAddress = $event->getRequest()->getConfig()->get('proxy');
        if ($proxy = $proxyManager->findProxyByAddress($proxyAddress)) {
            $proxy->increaseFailedAttemptsCount();
        }

        echo sprintf("Request failed to %s with proxy %s\n", $event->getRequest()->getUrl(), $proxyAddress);
    },
    'pool_size' => 100
];

// Формируем набор HTTP-запросов
$requests = [
    $guzzle->createRequest('GET', 'http://example.com/first.html', ['connect_timeout' => 10, 'timeout' => 20]),
    $guzzle->createRequest('GET', 'http://example.com/second.html', ['connect_timeout' => 10, 'timeout' => 20]),
    ...
    $guzzle->createRequest('GET', 'http://example.com/last.html', ['connect_timeout' => 10, 'timeout' => 20])
];

// Запускаем асинхронное скачивание
Pool::batch($guzzle, $requests, $options);
```

###  Health Score

22

—

LowBetter than 22% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity12

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/966525?v=4)[Cosmologist](/maintainers/Cosmologist)[@Cosmologist](https://github.com/Cosmologist)

---

Top Contributors

[![Cosmologist](https://avatars.githubusercontent.com/u/966525?v=4)](https://github.com/Cosmologist "Cosmologist (2 commits)")

### Embed Badge

![Health badge](/badges/cosmologist-proxy-manager-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/cosmologist-proxy-manager-bundle/health.svg)](https://phpackages.com/packages/cosmologist-proxy-manager-bundle)
```

###  Alternatives

[outl1ne/nova-grid

A Laravel Nova tool that allows placing fields in a grid using -&gt;size() helpers.

1017.6k](/packages/outl1ne-nova-grid)[smsgateway24/smsgateway24-php-sdk

php sdk for smsgateway24.com

109.2k](/packages/smsgateway24-smsgateway24-php-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
