public function executeRequests(array $requests)
 {
     set_time_limit(Settings::TIMEOUT_LIMIT_IN_SECONDS);
     ini_set('memory_limit', Settings::MEMORY_LIMIT);
     $this->resetFileHandles();
     $pool = new Pool($this->client, $requests, ['complete' => function (CompleteEvent $event) {
         $this->saveResponseToFile($event->getResponse());
     }, 'pool_size' => Settings::NB_OF_PARALLEL_REQUESTS]);
     $pool->wait();
     return $this->fileHandles;
 }
 /**
  * @issue https://github.com/guzzle/guzzle/issues/867
  */
 public function testDoesNotFailInEventSystemForNetworkError()
 {
     $c = new Client();
     $r = $c->createRequest('GET', Server::$url, ['timeout' => 1, 'connect_timeout' => 1, 'proxy' => 'http://127.0.0.1:123/foo']);
     $events = [];
     $fn = function (AbstractTransferEvent $event) use(&$events) {
         $events[] = [get_class($event), $event->hasResponse(), $event->getResponse()];
     };
     $pool = new Pool($c, [$r], ['error' => $fn, 'end' => $fn]);
     $pool->wait();
     $this->assertCount(2, $events);
     $this->assertEquals('GuzzleHttp\\Event\\ErrorEvent', $events[0][0]);
     $this->assertFalse($events[0][1]);
     $this->assertNull($events[0][2]);
     $this->assertEquals('GuzzleHttp\\Event\\EndEvent', $events[1][0]);
     $this->assertFalse($events[1][1]);
     $this->assertNull($events[1][2]);
 }
Пример #3
0
 public static function prepare(Event $event)
 {
     $composer = $event->getComposer();
     $io = $event->getIO();
     // TODO: Remove this hack when composer supports loading autoload.files for plugins
     $vendorDir = $composer->getConfig()->get('vendor-dir');
     $composerDir = $vendorDir . '/composer';
     $includeFiles = (require $composerDir . '/autoload_files.php');
     foreach ($includeFiles as $file) {
         require $file;
     }
     // End of hack
     /** @var \Composer\Package\Package $package */
     $package = $composer->getPackage();
     $dependencies = [];
     $requires = $package->getRequires();
     /** @var \Composer\Package\Link $require */
     foreach ($requires as $require) {
         $dependencies[$require->getTarget()] = $require->getPrettyConstraint();
     }
     $devRequires = $package->getDevRequires();
     /** @var \Composer\Package\Link $require */
     foreach ($devRequires as $devRequire) {
         $dependencies[$devRequire->getTarget()] = $devRequire->getPrettyConstraint();
     }
     $extra = $package->getExtra();
     $proxyUrls = isset($extra['composer-proxy']['url']) ? $extra['composer-proxy']['url'] : null;
     if (!$proxyUrls) {
         $io->write('<warning>No composer proxy url defined in composer.json. You might not use your proxy when fetching packages.</warning>');
         return;
     }
     $io->write('<info>Sending data over to the defined proxies in order to cache your packages. Please wait, this may take a while...</info>');
     $client = new GuzzleClient();
     $requests = [];
     foreach ($proxyUrls as $proxyUrl) {
         $requests[] = $client->createRequest('POST', $proxyUrl . '/packages', ['body' => $dependencies]);
     }
     $pool = new Pool($client, $requests);
     $res = $pool->wait();
     $io->write('<info>Proxies caching completed!</info>');
 }
Пример #4
0
 /**
  * Sends all of the requests concurrently and fulfills the promises
  */
 public function sendAll()
 {
     $pool = new Pool($this->client, $this->requests, ['pool_size' => 20]);
     $pool->wait();
     $this->requests = [];
 }
Пример #5
0
 public function testDoesNotInfinitelyRecurse()
 {
     $client = new Client(['handler' => function () {
         throw new \RuntimeException('No network access');
     }]);
     $last = null;
     $client->getEmitter()->on('before', function (BeforeEvent $e) use(&$last) {
         $e->intercept(new Response(200));
         if (function_exists('xdebug_get_stack_depth')) {
             if ($last) {
                 $this->assertEquals($last, xdebug_get_stack_depth());
             } else {
                 $last = xdebug_get_stack_depth();
             }
         }
     });
     $requests = [];
     for ($i = 0; $i < 100; $i++) {
         $requests[] = $client->createRequest('GET', 'http://foo.com');
     }
     $pool = new Pool($client, $requests);
     $pool->wait();
 }
Пример #6
0
 public function testEmitsProgress()
 {
     $client = new Client(['handler' => function () {
         throw new \RuntimeException('No network access');
     }]);
     $responses = [new Response(200), new Response(404)];
     $client->getEmitter()->attach(new Mock($responses));
     $requests = [$client->createRequest('GET', 'http://foo.com/baz'), $client->createRequest('HEAD', 'http://httpbin.org/get')];
     $pool = new Pool($client, $requests);
     $count = 0;
     $thenned = null;
     $pool->then(function ($value) use(&$thenned) {
         $thenned = $value;
     }, null, function ($result) use(&$count, $requests) {
         $this->assertSame($requests[$count], $result['request']);
         if ($count == 0) {
             $this->assertNull($result['error']);
             $this->assertEquals(200, $result['response']->getStatusCode());
         } else {
             $this->assertInstanceOf('GuzzleHttp\\Exception\\ClientException', $result['error']);
         }
         $count++;
     });
     $pool->wait();
     $this->assertEquals(2, $count);
     $this->assertEquals(true, $thenned);
 }
 public function __destruct()
 {
     flush();
     if (!empty($this->delayedRequests)) {
         $pool = new Pool($this->client, $this->delayedRequests, ['pool_size' => count($this->delayedRequests), 'complete' => ['fn' => function (CompleteEvent $event) {
             $this->logger->debug('Delayed request to QBank sent. ' . strtoupper($event->getRequest()->getMethod()) . ' ' . $event->getRequest()->getPath(), ['endpoint' => $event->getRequest()->getPath(), 'parameters' => $event->getRequest()->getBody() instanceof PostBodyInterface ? $event->getRequest()->getBody()->getFields() : [], 'method' => $event->getRequest()->getMethod(), 'response' => $event->hasResponse() ? substr($event->getResponse()->getBody(), 0, 4096) : '']);
         }, 'once' => true], 'error' => ['fn' => function (ErrorEvent $event) {
             $this->logger->warning('Error while sending delayed request to QBank: ' . $event->getException()->getMessage(), ['endpoint' => $event->getRequest()->getPath(), 'parameters' => $event->getRequest()->getBody() instanceof PostBodyInterface ? $event->getRequest()->getBody()->getFields() : [], 'method' => $event->getRequest()->getMethod(), 'response' => $event->hasResponse() ? substr($event->getResponse()->getBody(), 0, 4096) : '']);
         }, 'once' => true]]);
         $pool->wait();
     }
 }
Пример #8
0
<?php

include dirname(__DIR__) . '/vendor/autoload.php';
use Firebase\Firebase;
use GuzzleHttp\Pool;
$fb = Firebase::initialize($argv[2], $argv[1]);
$requests = $fb->batch(function ($fb) {
    /** @var Firebase $fb */
    for ($i = 0; $i < 100; $i++) {
        $fb->push('list', $i);
    }
});
//pooling the requests and executing async
$pool = new Pool($fb->getClient(), $requests);
$pool->wait();
//the pool accepts an optional array as third argument
//for more info have a look at: http://docs.guzzlephp.org/en/latest/clients.html?highlight=pool
 public function test_integration_SwitchIdentities()
 {
     /*
      * Scenario:
      * 4 requests, 1 proxy with 2 identities
      * Identies are switched after 2 requests
      * In the end,
      * both identies should have made 2 requests
      * No retries take place
      */
     $client = new Client();
     $identity0 = new Identity("0");
     $identity1 = new Identity("1");
     $identities = [0 => $identity0, 1 => $identity1];
     $identityOrder = [0, 1];
     $expectedIdentities = [0, 0, 1, 1];
     /** @var  RandomizerInterface|PHPUnit_Framework_MockObject_MockObject $randomizer */
     $randomizer = $this->getMock(RandomizerInterface::class);
     $getKeysFn = function ($arr) use(&$identityOrder) {
         return array_shift($identityOrder);
     };
     $randomizer->expects($this->any())->method("randKey")->willReturnCallback($getKeysFn);
     $counter = new RandomCounterInterval(2, 2);
     // will always return 2;
     $proxy0 = new RotatingIdentityProxy($identities, "0", $randomizer, $counter);
     $proxies = [0 => $proxy0];
     $success = true;
     $responses2Proxy = [[$success, $proxy0], [$success, $proxy0], [$success, $proxy0], [$success, $proxy0]];
     $randKeys = [];
     $responses = [];
     foreach ($responses2Proxy as $key => $val) {
         $randKeys[$key] = array_search($val[1], $proxies);
         $responses[$key] = $val[0] ? new Response(200) : new Response(403);
     }
     $h = $this->getHelper(null, null, $randKeys);
     $useOwnIp = false;
     $rotator = new ProxyRotator($proxies, $useOwnIp, $h->getRandomMock());
     $sub = new RotatingProxySubscriber($rotator);
     $mock = new Mock($responses);
     // Add the mock subscriber to the client.
     $client->getEmitter()->attach($mock);
     $client->getEmitter()->attach($sub);
     // build requests - we need to do this _after_ the $mock hast been attached to the client,
     // otherwise a real request is sent.
     $requests = [];
     foreach ($responses as $key => $val) {
         $req = $client->createRequest("GET");
         $req->getConfig()->set("request_id", $key);
         $requests[$key] = $req;
     }
     $actualIdentities = [];
     $options = ["pool_size" => 1, "end" => function (EndEvent $ev) use(&$actualIdentities) {
         $actual = $ev->getRequest()->getHeader("user-agent");
         $actualIdentities[] = $actual;
     }];
     $pool = new Pool($client, $requests, $options);
     $pool->wait();
     $this->assertEquals($expectedIdentities, $actualIdentities);
 }