2017 © Pedro PelΓ‘ez
 

library proxy-manager-bundle

Proxy Manager Bundle

image

cosmologist/proxy-manager-bundle

Proxy Manager Bundle

  • Monday, April 13, 2015
  • by Cosmologist
  • Repository
  • 1 Watchers
  • 0 Stars
  • 94 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

ProxyManagerBundle

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ для контроля Π·Π° использованиСм прокси-сСрвСров., (*1)

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ использованиСм ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прокси, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСстали Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ., (*2)

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠ°ΠΊ Π±Π°Π½Π΄Π» для Symfony., (*3)

Установка

Для установки Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ composer:, (*4)

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., (*5)

$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);

The Versions

13/04 2015

dev-master

9999999-dev

Proxy Manager Bundle

  Sources   Download

MIT

The Requires

  • php >=5.3.0