| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Jaeger <JaegerCode@gmail.com>
- * Date: 18/12/10
- * Time: 下午6:04
- */
- namespace Jaeger;
- use GuzzleHttp\Client;
- use Closure;
- use GuzzleHttp\Pool;
- use GuzzleHttp\Psr7\Request;
- class MultiRequest
- {
- protected $client;
- protected $headers = [];
- protected $options = [];
- protected $successCallback;
- protected $errorCallback;
- protected $urls = [];
- protected $method;
- protected $concurrency = 5;
- public function __construct(Client $client)
- {
- $this->client = $client;
- $this->headers = [
- 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
- ];
- }
- public static function newRequest(Client $client)
- {
- $request = new self($client);
- return $request;
- }
- public function withHeaders($headers)
- {
- $this->headers = array_merge($this->headers,$headers);
- return $this;
- }
- public function withOptions($options)
- {
- $this->options = $options;
- return $this;
- }
- public function concurrency($concurrency)
- {
- $this->concurrency = $concurrency;
- return $this;
- }
- public function success(Closure $success)
- {
- $this->successCallback = $success;
- return $this;
- }
- public function error(Closure $error)
- {
- $this->errorCallback = $error;
- return $this;
- }
- public function urls(array $urls)
- {
- $this->urls = $urls;
- return $this;
- }
- public function get()
- {
- $this->method = 'GET';
- $this->send();
- }
- public function post()
- {
- $this->method = 'POST';
- $this->send();
- }
- protected function send()
- {
- $client = $this->client;
- $requests = function ($urls) use($client){
- foreach ($urls as $url) {
- if (is_string($url)) {
- yield new Request($this->method,$url,$this->headers);
- } else {
- yield $url;
- }
- }
- };
- $pool = new Pool($client, $requests($this->urls), [
- 'concurrency' => $this->concurrency,
- 'fulfilled' => $this->successCallback,
- 'rejected' => $this->errorCallback,
- 'options' => $this->options
- ]);
- $promise = $pool->promise();
- $promise->wait();
- }
- }
|