GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Test Failed
Push — master ( a4817e...a1969d )
by sunsky
02:11
created
src/Request.php 1 patch
Indentation   +398 added lines, -398 removed lines patch added patch discarded remove patch
@@ -15,402 +15,402 @@
 block discarded – undo
15 15
 
16 16
 class Request extends Http
17 17
 {
18
-    const MAX_REDIRECTS_DEFAULT = 10;
19
-    protected static $curlAlias = array(
20
-        'url' => 'CURLOPT_URL',
21
-        'uri' => 'CURLOPT_URL',
22
-        'debug' => 'CURLOPT_VERBOSE',//for debug verbose
23
-        'method' => 'CURLOPT_CUSTOMREQUEST',
24
-        'data' => 'CURLOPT_POSTFIELDS', // array or string , file begin with '@'
25
-        'ua' => 'CURLOPT_USERAGENT',
26
-        'timeout' => 'CURLOPT_TIMEOUT', // (secs) 0 means indefinitely
27
-        'connect_timeout' => 'CURLOPT_CONNECTTIMEOUT',
28
-        'referer' => 'CURLOPT_REFERER',
29
-        'binary' => 'CURLOPT_BINARYTRANSFER',
30
-        'port' => 'CURLOPT_PORT',
31
-        'header' => 'CURLOPT_HEADER', // TRUE:include header
32
-        'headers' => 'CURLOPT_HTTPHEADER', // array
33
-        'download' => 'CURLOPT_FILE', // writing file stream (using fopen()), default is STDOUT
34
-        'upload' => 'CURLOPT_INFILE', // reading file stream
35
-        'transfer' => 'CURLOPT_RETURNTRANSFER', // TRUE:return string; FALSE:output directly (curl_exec)
36
-        'follow_location' => 'CURLOPT_FOLLOWLOCATION',
37
-        'timeout_ms' => 'CURLOPT_TIMEOUT_MS', // milliseconds,  libcurl version > 7.36.0 ,
38
-    );
39
-    protected static $logger;
40
-    public $curlHandle;
41
-    public
42
-        $uri,
43
-        $timeout,
44
-        $maxRedirects,
45
-        $followRedirects;
46
-    public $cert;
47
-    public $key;
48
-    public $passphrase;
49
-    public $encoding;
50
-    public $payload;
51
-    protected $options = array(
52
-        'CURLOPT_MAXREDIRS' => 10,
53
-        'header' => true,
54
-        'method' => self::GET,
55
-        'transfer' => true,
56
-        'follow_location' => true,
57
-        'timeout' => 0);
58
-    protected $endCallback;
59
-    protected $withURIQuery;
60
-    protected $hasInitialized = false;
61
-
62
-    protected function __construct()
63
-    {
64
-
65
-    }
66
-
67
-    public static function create()
68
-    {
69
-        return new self;
70
-    }
71
-
72
-    public static function setLogger($logger)
73
-    {
74
-        self::$logger = $logger;
75
-    }
76
-
77
-    /**
78
-     * Specify   timeout
79
-     * @param float|int $timeout seconds to timeout the HTTP call
80
-     * @return Request
81
-     */
82
-    public function timeout($timeout)
83
-    {
84
-        $this->timeout = $timeout;
85
-        return $this;
86
-    }
87
-
88
-    public function noFollow()
89
-    {
90
-        return $this->follow(0);
91
-    }
92
-
93
-    /**
94
-     * If the response is a 301 or 302 redirect, automatically
95
-     * send off another request to that location
96
-     * @param int $follow follow or not to follow or maximal number of redirects
97
-     * @return Request
98
-     */
99
-    public function follow(int $follow)
100
-    {
101
-        $this->maxRedirects = abs($follow);
102
-        $this->followRedirects = $follow > 0;
103
-        return $this;
104
-    }
105
-
106
-    public function endCallback()
107
-    {
108
-        return $this->endCallback;
109
-    }
110
-
111
-    public function hasEndCallback()
112
-    {
113
-        return isset($this->endCallback);
114
-    }
115
-
116
-    public function uri($uri)
117
-    {
118
-        $this->uri = $uri;
119
-        return $this;
120
-    }
121
-
122
-    public function hasCert()
123
-    {
124
-        return isset($this->cert) && isset($this->key);
125
-    }
126
-
127
-    /**
128
-     * Use Client Side Cert Authentication
129
-     * @param string $key file path to client key
130
-     * @param string $cert file path to client cert
131
-     * @param string $passphrase for client key
132
-     * @param string $encoding default PEM
133
-     * @return Request
134
-     */
135
-    public function cert($cert, $key, $passphrase = null, $encoding = 'PEM')
136
-    {
137
-        $this->cert = $cert;
138
-        $this->key = $key;
139
-        $this->passphrase = $passphrase;
140
-        $this->encoding = $encoding;
141
-        return $this;
142
-    }
143
-
144
-    public function body($payload, $mimeType = null)
145
-    {
146
-        $this->mime($mimeType);
147
-        $this->payload = $payload;
148
-        // Iserntentially don't call _serializePayload yet.  Wait until
149
-        // we actually send off the request to convert payload to string.
150
-        // At that time, the `serialized_payload` is set accordingly.
151
-        return $this;
152
-    }
153
-    public function mime($mime)
154
-    {
155
-        if (empty($mime)) return $this;
156
-        $this->content_type = $this->expected_type = Mime::getFullMime($mime);
157
-        if ($this->isUpload()) {
158
-            $this->neverSerializePayload();
159
-        }
160
-        return $this;
161
-    }
162
-    public function addHeader($header_name, $value)
163
-    {
164
-        $this->headers[$header_name] = $value;
165
-        return $this;
166
-    }
167
-
168
-    public function addHeaders(array $headers)
169
-    {
170
-        foreach ($headers as $header => $value) {
171
-            $this->addHeader($header, $value);
172
-        }
173
-        return $this;
174
-    }
175
-    public function expectsType($mime)
176
-    {
177
-        return $this->expects($mime);
178
-    }
179
-    public function sendType($mime)
180
-    {
181
-        return $this->contentType = $mime;
182
-    }
183
-    public function expects($mime)
184
-    {
185
-        if (empty($mime)) return $this;
186
-        $this->expected_type = Mime::getFullMime($mime);
187
-        return $this;
188
-    }
189
-    /**
190
-     * @param $field alias or field name
191
-     * @return bool|mixed
192
-     */
193
-    public function getIni($field)
194
-    {
195
-        $alias = self::optionAlias($field);
196
-        return isset($this->options[$alias]) ? $this->options[$alias] : false;
197
-    }
198
-
199
-    /**
200
-     * @param $key
201
-     * @return mixed
202
-     */
203
-    protected static function optionAlias($key)
204
-    {
205
-        $alias = false;
206
-        if (isset(self::$curlAlias[$key])) {
207
-            $alias = self::$curlAlias[$key];
208
-        } elseif ((substr($key, 0, strlen('CURLOPT_')) == 'CURLOPT_') && defined($key)) {
209
-            $alias = $key;
210
-        }
211
-        return $alias;
212
-    }
213
-
214
-    public function addQuery($data)
215
-    {
216
-        if (!empty($data)) {
217
-            if (is_array($data)) {
218
-                $this->withURIQuery = http_build_query($data);
219
-            } else if (is_string($data)) {
220
-                $this->withURIQuery = $data;
221
-            } else {
222
-                throw new InvalidArgumentException('data must be array or string');
223
-            }
224
-        }
225
-        return $this;
226
-    }
227
-
228
-    public function post($uri, $payload = null, array $options = array())
229
-    {
230
-        return $this->ini(Http::POST, $uri, $payload, $options);
231
-    }
232
-
233
-    /*  no body  */
234
-
235
-    protected function ini($method, $url,  $data , array $options = array())
236
-    {
237
-        $options = array('url' => $url, 'method' => $method, 'data' => $data) + $options;
238
-        $this->addOptions($options);
239
-
240
-        return $this;
241
-    }
242
-
243
-    public function addOptions(array $options = array())
244
-    {
245
-        $this->options = $options + $this->options;
246
-        $this->uri = $this->options['url'];
247
-        return $this;
248
-    }
249
-
250
-    function put($uri, $payload = null, array $options = array())
251
-    {
252
-        return $this->ini(Http::PUT, $uri, $payload, $options);
253
-    }
254
-
255
-    function patch($uri, $payload = null, array $options = array())
256
-    {
257
-        return $this->ini(Http::PATCH, $uri, $payload, $options);
258
-    }
259
-
260
-    public function get($uri, array $options = array())
261
-    {
262
-        return $this->ini(Http::GET, $uri, array(), $options);
263
-    }
264
-
265
-    function options($uri, array $options = array())
266
-    {
267
-        return $this->ini(Http::OPTIONS, $uri, array(), $options);
268
-    }
269
-
270
-    function head($uri, array $options = array())
271
-    {
272
-        return $this->ini(Http::HEAD, $uri, array('CURLOPT_NOBODY' => true), $options);
273
-    }
274
-
275
-    function delete($uri, array $options = array())
276
-    {
277
-        return $this->ini(Http::DELETE, $uri, array(), $options);
278
-    }
279
-
280
-    function trace($uri, array $options = array())
281
-    {
282
-        return $this->ini(Http::TRACE, $uri, array(), $options);
283
-    }
284
-
285
-    /**
286
-     * @return Response
287
-     */
288
-    public function send()
289
-    {
290
-        if (!$this->hasInitialized)
291
-            $this->applyOptions();
292
-        $response = $this->makeResponse();
293
-        if ($this->endCallback) {
294
-            $func = $this->endCallback;
295
-            $func($response);
296
-        }
297
-        return $response;
298
-    }
299
-
300
-    public function applyOptions()
301
-    {
302
-        $curl = curl_init();
303
-        $this->curlHandle = $curl;
304
-        $this->prepare();
305
-        $this->hasInitialized = true;
306
-        return $this;
307
-    }
308
-
309
-    protected function prepare()
310
-    {
311
-        if (empty($this->options['url'])) {
312
-            throw new InvalidArgumentException('url can not empty');
313
-        }
314
-
315
-        if (isset($this->options['data'])) {
316
-            $this->options['data'] = is_array($this->options['data']) ? http_build_query($this->options['data']) : $this->options['data'];//for better compatibility
317
-        }
318
-        if (isset($this->withURIQuery)) {
319
-            $this->options['url'] .= strpos($this->options['url'], '?') === FALSE ? '?' : '&';
320
-            $this->options['url'] .= $this->withURIQuery;
321
-        }
322
-        if (isset($this->options['callback'])) {
323
-            $this->onEnd($this->options['callback']);
324
-            unset($this->options['callback']);
325
-        }
326
-        //swap ip and host
327
-        if (!empty($this->options['ip'])) {
328
-            $matches = array();
329
-            preg_match('/\/\/([^\/]+)/', $this->options['url'], $matches);
330
-            $host = $matches[1];
331
-            if (empty($this->options['headers']) || !is_array($this->options['headers'])) {
332
-                $this->options['headers'] = array('Host: ' . $host);
333
-            } else {
334
-                $this->options['headers'][] = 'Host: ' . $host;
335
-            }
336
-            $this->options['url'] = preg_replace('/\/\/([^\/]+)/', '//' . $this->options['ip'], $this->options['url']);
337
-            unset($this->options['ip']);
338
-            unset($host);
339
-        }
340
-        //process version
341
-        if (!empty($this->options['http_version'])) {
342
-            $version = $this->options['http_version'];
343
-            if ($version == '1.0') {
344
-                $this->options['CURLOPT_HTTP_VERSION'] = CURLOPT_HTTP_VERSION_1_0;
345
-            } elseif ($version == '1.1') {
346
-                $this->options['CURLOPT_HTTP_VERSION'] = CURLOPT_HTTP_VERSION_1_1;
347
-            }
348
-
349
-            unset($version);
350
-        }
351
-
352
-        //convert secs to milliseconds
353
-        if (defined('CURLOPT_TIMEOUT_MS')) {
354
-            if (!isset($this->options['timeout_ms'])) {
355
-                $this->options['timeout_ms'] = intval($this->options['timeout'] * 1000);
356
-            } else {
357
-                $this->options['timeout_ms'] = intval($this->options['timeout_ms']);
358
-            }
359
-        }
360
-
361
-
362
-        $cURLOptions = self::filterAndRaw($this->options);
363
-
364
-        curl_setopt_array($this->curlHandle, $cURLOptions);
365
-
366
-        return $this;
367
-    }
368
-
369
-    public function onEnd(callable $callback)
370
-    {
371
-        if (!is_callable($callback)) {
372
-            throw new InvalidArgumentException('callback not is callable :' . print_r($callback, 1));
373
-        }
374
-
375
-        $this->endCallback = $callback;
376
-        return $this;
377
-    }
378
-
379
-    protected static function filterAndRaw(array &$options)
380
-    {
381
-        $opts = array();
382
-        foreach ($options as $key => $val) {
383
-            $alias = self::optionAlias($key);
384
-            $options[$alias] = $val;
385
-            if ($alias) {
386
-                $opts[constant($alias)] = $val;
387
-            }
388
-            unset($options[$key]);
389
-        }
390
-        return $opts;
391
-    }
392
-
393
-    public function makeResponse($isMultiCurl = false)
394
-    {
395
-        $body = $isMultiCurl ? curl_multi_getcontent($this->curlHandle) : curl_exec($this->curlHandle);
396
-        $info = curl_getinfo($this->curlHandle);
397
-        $errno = curl_errno($this->curlHandle);
398
-        $error = curl_error($this->curlHandle);
399
-        $response = Response::create($this, $body, $info, $errno, $error);
400
-        if (!is_null(self::$logger)) {
401
-            self::log($response);
402
-        }
403
-
404
-        return $response;
405
-    }
406
-
407
-    private static function log(Response $response)
408
-    {
409
-        if ($response->hasErrors()) {
410
-            self::$logger->error($response->request->getURI() . "\t" . $response->error, array(
411
-                'response' => print_r($response, 1),
412
-            ));
413
-        }
414
-
415
-    }
18
+	const MAX_REDIRECTS_DEFAULT = 10;
19
+	protected static $curlAlias = array(
20
+		'url' => 'CURLOPT_URL',
21
+		'uri' => 'CURLOPT_URL',
22
+		'debug' => 'CURLOPT_VERBOSE',//for debug verbose
23
+		'method' => 'CURLOPT_CUSTOMREQUEST',
24
+		'data' => 'CURLOPT_POSTFIELDS', // array or string , file begin with '@'
25
+		'ua' => 'CURLOPT_USERAGENT',
26
+		'timeout' => 'CURLOPT_TIMEOUT', // (secs) 0 means indefinitely
27
+		'connect_timeout' => 'CURLOPT_CONNECTTIMEOUT',
28
+		'referer' => 'CURLOPT_REFERER',
29
+		'binary' => 'CURLOPT_BINARYTRANSFER',
30
+		'port' => 'CURLOPT_PORT',
31
+		'header' => 'CURLOPT_HEADER', // TRUE:include header
32
+		'headers' => 'CURLOPT_HTTPHEADER', // array
33
+		'download' => 'CURLOPT_FILE', // writing file stream (using fopen()), default is STDOUT
34
+		'upload' => 'CURLOPT_INFILE', // reading file stream
35
+		'transfer' => 'CURLOPT_RETURNTRANSFER', // TRUE:return string; FALSE:output directly (curl_exec)
36
+		'follow_location' => 'CURLOPT_FOLLOWLOCATION',
37
+		'timeout_ms' => 'CURLOPT_TIMEOUT_MS', // milliseconds,  libcurl version > 7.36.0 ,
38
+	);
39
+	protected static $logger;
40
+	public $curlHandle;
41
+	public
42
+		$uri,
43
+		$timeout,
44
+		$maxRedirects,
45
+		$followRedirects;
46
+	public $cert;
47
+	public $key;
48
+	public $passphrase;
49
+	public $encoding;
50
+	public $payload;
51
+	protected $options = array(
52
+		'CURLOPT_MAXREDIRS' => 10,
53
+		'header' => true,
54
+		'method' => self::GET,
55
+		'transfer' => true,
56
+		'follow_location' => true,
57
+		'timeout' => 0);
58
+	protected $endCallback;
59
+	protected $withURIQuery;
60
+	protected $hasInitialized = false;
61
+
62
+	protected function __construct()
63
+	{
64
+
65
+	}
66
+
67
+	public static function create()
68
+	{
69
+		return new self;
70
+	}
71
+
72
+	public static function setLogger($logger)
73
+	{
74
+		self::$logger = $logger;
75
+	}
76
+
77
+	/**
78
+	 * Specify   timeout
79
+	 * @param float|int $timeout seconds to timeout the HTTP call
80
+	 * @return Request
81
+	 */
82
+	public function timeout($timeout)
83
+	{
84
+		$this->timeout = $timeout;
85
+		return $this;
86
+	}
87
+
88
+	public function noFollow()
89
+	{
90
+		return $this->follow(0);
91
+	}
92
+
93
+	/**
94
+	 * If the response is a 301 or 302 redirect, automatically
95
+	 * send off another request to that location
96
+	 * @param int $follow follow or not to follow or maximal number of redirects
97
+	 * @return Request
98
+	 */
99
+	public function follow(int $follow)
100
+	{
101
+		$this->maxRedirects = abs($follow);
102
+		$this->followRedirects = $follow > 0;
103
+		return $this;
104
+	}
105
+
106
+	public function endCallback()
107
+	{
108
+		return $this->endCallback;
109
+	}
110
+
111
+	public function hasEndCallback()
112
+	{
113
+		return isset($this->endCallback);
114
+	}
115
+
116
+	public function uri($uri)
117
+	{
118
+		$this->uri = $uri;
119
+		return $this;
120
+	}
121
+
122
+	public function hasCert()
123
+	{
124
+		return isset($this->cert) && isset($this->key);
125
+	}
126
+
127
+	/**
128
+	 * Use Client Side Cert Authentication
129
+	 * @param string $key file path to client key
130
+	 * @param string $cert file path to client cert
131
+	 * @param string $passphrase for client key
132
+	 * @param string $encoding default PEM
133
+	 * @return Request
134
+	 */
135
+	public function cert($cert, $key, $passphrase = null, $encoding = 'PEM')
136
+	{
137
+		$this->cert = $cert;
138
+		$this->key = $key;
139
+		$this->passphrase = $passphrase;
140
+		$this->encoding = $encoding;
141
+		return $this;
142
+	}
143
+
144
+	public function body($payload, $mimeType = null)
145
+	{
146
+		$this->mime($mimeType);
147
+		$this->payload = $payload;
148
+		// Iserntentially don't call _serializePayload yet.  Wait until
149
+		// we actually send off the request to convert payload to string.
150
+		// At that time, the `serialized_payload` is set accordingly.
151
+		return $this;
152
+	}
153
+	public function mime($mime)
154
+	{
155
+		if (empty($mime)) return $this;
156
+		$this->content_type = $this->expected_type = Mime::getFullMime($mime);
157
+		if ($this->isUpload()) {
158
+			$this->neverSerializePayload();
159
+		}
160
+		return $this;
161
+	}
162
+	public function addHeader($header_name, $value)
163
+	{
164
+		$this->headers[$header_name] = $value;
165
+		return $this;
166
+	}
167
+
168
+	public function addHeaders(array $headers)
169
+	{
170
+		foreach ($headers as $header => $value) {
171
+			$this->addHeader($header, $value);
172
+		}
173
+		return $this;
174
+	}
175
+	public function expectsType($mime)
176
+	{
177
+		return $this->expects($mime);
178
+	}
179
+	public function sendType($mime)
180
+	{
181
+		return $this->contentType = $mime;
182
+	}
183
+	public function expects($mime)
184
+	{
185
+		if (empty($mime)) return $this;
186
+		$this->expected_type = Mime::getFullMime($mime);
187
+		return $this;
188
+	}
189
+	/**
190
+	 * @param $field alias or field name
191
+	 * @return bool|mixed
192
+	 */
193
+	public function getIni($field)
194
+	{
195
+		$alias = self::optionAlias($field);
196
+		return isset($this->options[$alias]) ? $this->options[$alias] : false;
197
+	}
198
+
199
+	/**
200
+	 * @param $key
201
+	 * @return mixed
202
+	 */
203
+	protected static function optionAlias($key)
204
+	{
205
+		$alias = false;
206
+		if (isset(self::$curlAlias[$key])) {
207
+			$alias = self::$curlAlias[$key];
208
+		} elseif ((substr($key, 0, strlen('CURLOPT_')) == 'CURLOPT_') && defined($key)) {
209
+			$alias = $key;
210
+		}
211
+		return $alias;
212
+	}
213
+
214
+	public function addQuery($data)
215
+	{
216
+		if (!empty($data)) {
217
+			if (is_array($data)) {
218
+				$this->withURIQuery = http_build_query($data);
219
+			} else if (is_string($data)) {
220
+				$this->withURIQuery = $data;
221
+			} else {
222
+				throw new InvalidArgumentException('data must be array or string');
223
+			}
224
+		}
225
+		return $this;
226
+	}
227
+
228
+	public function post($uri, $payload = null, array $options = array())
229
+	{
230
+		return $this->ini(Http::POST, $uri, $payload, $options);
231
+	}
232
+
233
+	/*  no body  */
234
+
235
+	protected function ini($method, $url,  $data , array $options = array())
236
+	{
237
+		$options = array('url' => $url, 'method' => $method, 'data' => $data) + $options;
238
+		$this->addOptions($options);
239
+
240
+		return $this;
241
+	}
242
+
243
+	public function addOptions(array $options = array())
244
+	{
245
+		$this->options = $options + $this->options;
246
+		$this->uri = $this->options['url'];
247
+		return $this;
248
+	}
249
+
250
+	function put($uri, $payload = null, array $options = array())
251
+	{
252
+		return $this->ini(Http::PUT, $uri, $payload, $options);
253
+	}
254
+
255
+	function patch($uri, $payload = null, array $options = array())
256
+	{
257
+		return $this->ini(Http::PATCH, $uri, $payload, $options);
258
+	}
259
+
260
+	public function get($uri, array $options = array())
261
+	{
262
+		return $this->ini(Http::GET, $uri, array(), $options);
263
+	}
264
+
265
+	function options($uri, array $options = array())
266
+	{
267
+		return $this->ini(Http::OPTIONS, $uri, array(), $options);
268
+	}
269
+
270
+	function head($uri, array $options = array())
271
+	{
272
+		return $this->ini(Http::HEAD, $uri, array('CURLOPT_NOBODY' => true), $options);
273
+	}
274
+
275
+	function delete($uri, array $options = array())
276
+	{
277
+		return $this->ini(Http::DELETE, $uri, array(), $options);
278
+	}
279
+
280
+	function trace($uri, array $options = array())
281
+	{
282
+		return $this->ini(Http::TRACE, $uri, array(), $options);
283
+	}
284
+
285
+	/**
286
+	 * @return Response
287
+	 */
288
+	public function send()
289
+	{
290
+		if (!$this->hasInitialized)
291
+			$this->applyOptions();
292
+		$response = $this->makeResponse();
293
+		if ($this->endCallback) {
294
+			$func = $this->endCallback;
295
+			$func($response);
296
+		}
297
+		return $response;
298
+	}
299
+
300
+	public function applyOptions()
301
+	{
302
+		$curl = curl_init();
303
+		$this->curlHandle = $curl;
304
+		$this->prepare();
305
+		$this->hasInitialized = true;
306
+		return $this;
307
+	}
308
+
309
+	protected function prepare()
310
+	{
311
+		if (empty($this->options['url'])) {
312
+			throw new InvalidArgumentException('url can not empty');
313
+		}
314
+
315
+		if (isset($this->options['data'])) {
316
+			$this->options['data'] = is_array($this->options['data']) ? http_build_query($this->options['data']) : $this->options['data'];//for better compatibility
317
+		}
318
+		if (isset($this->withURIQuery)) {
319
+			$this->options['url'] .= strpos($this->options['url'], '?') === FALSE ? '?' : '&';
320
+			$this->options['url'] .= $this->withURIQuery;
321
+		}
322
+		if (isset($this->options['callback'])) {
323
+			$this->onEnd($this->options['callback']);
324
+			unset($this->options['callback']);
325
+		}
326
+		//swap ip and host
327
+		if (!empty($this->options['ip'])) {
328
+			$matches = array();
329
+			preg_match('/\/\/([^\/]+)/', $this->options['url'], $matches);
330
+			$host = $matches[1];
331
+			if (empty($this->options['headers']) || !is_array($this->options['headers'])) {
332
+				$this->options['headers'] = array('Host: ' . $host);
333
+			} else {
334
+				$this->options['headers'][] = 'Host: ' . $host;
335
+			}
336
+			$this->options['url'] = preg_replace('/\/\/([^\/]+)/', '//' . $this->options['ip'], $this->options['url']);
337
+			unset($this->options['ip']);
338
+			unset($host);
339
+		}
340
+		//process version
341
+		if (!empty($this->options['http_version'])) {
342
+			$version = $this->options['http_version'];
343
+			if ($version == '1.0') {
344
+				$this->options['CURLOPT_HTTP_VERSION'] = CURLOPT_HTTP_VERSION_1_0;
345
+			} elseif ($version == '1.1') {
346
+				$this->options['CURLOPT_HTTP_VERSION'] = CURLOPT_HTTP_VERSION_1_1;
347
+			}
348
+
349
+			unset($version);
350
+		}
351
+
352
+		//convert secs to milliseconds
353
+		if (defined('CURLOPT_TIMEOUT_MS')) {
354
+			if (!isset($this->options['timeout_ms'])) {
355
+				$this->options['timeout_ms'] = intval($this->options['timeout'] * 1000);
356
+			} else {
357
+				$this->options['timeout_ms'] = intval($this->options['timeout_ms']);
358
+			}
359
+		}
360
+
361
+
362
+		$cURLOptions = self::filterAndRaw($this->options);
363
+
364
+		curl_setopt_array($this->curlHandle, $cURLOptions);
365
+
366
+		return $this;
367
+	}
368
+
369
+	public function onEnd(callable $callback)
370
+	{
371
+		if (!is_callable($callback)) {
372
+			throw new InvalidArgumentException('callback not is callable :' . print_r($callback, 1));
373
+		}
374
+
375
+		$this->endCallback = $callback;
376
+		return $this;
377
+	}
378
+
379
+	protected static function filterAndRaw(array &$options)
380
+	{
381
+		$opts = array();
382
+		foreach ($options as $key => $val) {
383
+			$alias = self::optionAlias($key);
384
+			$options[$alias] = $val;
385
+			if ($alias) {
386
+				$opts[constant($alias)] = $val;
387
+			}
388
+			unset($options[$key]);
389
+		}
390
+		return $opts;
391
+	}
392
+
393
+	public function makeResponse($isMultiCurl = false)
394
+	{
395
+		$body = $isMultiCurl ? curl_multi_getcontent($this->curlHandle) : curl_exec($this->curlHandle);
396
+		$info = curl_getinfo($this->curlHandle);
397
+		$errno = curl_errno($this->curlHandle);
398
+		$error = curl_error($this->curlHandle);
399
+		$response = Response::create($this, $body, $info, $errno, $error);
400
+		if (!is_null(self::$logger)) {
401
+			self::log($response);
402
+		}
403
+
404
+		return $response;
405
+	}
406
+
407
+	private static function log(Response $response)
408
+	{
409
+		if ($response->hasErrors()) {
410
+			self::$logger->error($response->request->getURI() . "\t" . $response->error, array(
411
+				'response' => print_r($response, 1),
412
+			));
413
+		}
414
+
415
+	}
416 416
 }
Please login to merge, or discard this patch.
src/MultiRequest.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -15,95 +15,95 @@
 block discarded – undo
15 15
  */
16 16
 class MultiRequest
17 17
 {
18
-    protected static $requestPool;
19
-    protected static $multiHandler;
20
-    private static $instance;
18
+	protected static $requestPool;
19
+	protected static $multiHandler;
20
+	private static $instance;
21 21
 
22
-    protected function __construct()
23
-    {
24
-    }
22
+	protected function __construct()
23
+	{
24
+	}
25 25
 
26
-    public static function create()
27
-    {
28
-        if (!(self::$instance instanceof self)) {
29
-            self::$instance = new self;
30
-        }
31
-        self::prepare();
32
-        return self::$instance;
33
-    }
26
+	public static function create()
27
+	{
28
+		if (!(self::$instance instanceof self)) {
29
+			self::$instance = new self;
30
+		}
31
+		self::prepare();
32
+		return self::$instance;
33
+	}
34 34
 
35
-    protected static function prepare()
36
-    {
37
-        self::$multiHandler = curl_multi_init();
38
-    }
35
+	protected static function prepare()
36
+	{
37
+		self::$multiHandler = curl_multi_init();
38
+	}
39 39
 
40
-    public function add($method, $uri, $payload, array $options = array())
41
-    {
42
-        $options = array(
43
-                'method' => $method,
44
-                'url' => $uri,
45
-                'data' => $payload,
46
-            ) + $options;
47
-        $this->addOptions(array($options));
48
-        return $this;
49
-    }
40
+	public function add($method, $uri, $payload, array $options = array())
41
+	{
42
+		$options = array(
43
+				'method' => $method,
44
+				'url' => $uri,
45
+				'data' => $payload,
46
+			) + $options;
47
+		$this->addOptions(array($options));
48
+		return $this;
49
+	}
50 50
 
51
-    /**
52
-     * @param array $URLOptions
53
-     * example: array(array('url'=>'http://localhost:9999/','timeout'=>1, 'method'=>'POST', 'data'=>'aa=bb&c=d'))
54
-     * @return $this
55
-     */
56
-    public function addOptions(array $URLOptions)
57
-    {
58
-        foreach ($URLOptions as $options) {
59
-            $request = Request::create()->addOptions($options)->applyOptions();
60
-            if (isset($options['callback'])) {
61
-                $request->onEnd($options['callback']);
62
-            }
63
-            $this->import($request);
64
-        }
65
-        return $this;
66
-    }
51
+	/**
52
+	 * @param array $URLOptions
53
+	 * example: array(array('url'=>'http://localhost:9999/','timeout'=>1, 'method'=>'POST', 'data'=>'aa=bb&c=d'))
54
+	 * @return $this
55
+	 */
56
+	public function addOptions(array $URLOptions)
57
+	{
58
+		foreach ($URLOptions as $options) {
59
+			$request = Request::create()->addOptions($options)->applyOptions();
60
+			if (isset($options['callback'])) {
61
+				$request->onEnd($options['callback']);
62
+			}
63
+			$this->import($request);
64
+		}
65
+		return $this;
66
+	}
67 67
 
68
-    public function import(Request $request)
69
-    {
70
-        if (!is_resource($request->curlHandle)) {
71
-            throw new InvalidArgumentException('Request curl handle is not initialized');
72
-        }
73
-        curl_multi_add_handle(self::$multiHandler, $request->curlHandle);
74
-        self::$requestPool[] = $request;
75
-        return $this;
76
-    }
68
+	public function import(Request $request)
69
+	{
70
+		if (!is_resource($request->curlHandle)) {
71
+			throw new InvalidArgumentException('Request curl handle is not initialized');
72
+		}
73
+		curl_multi_add_handle(self::$multiHandler, $request->curlHandle);
74
+		self::$requestPool[] = $request;
75
+		return $this;
76
+	}
77 77
 
78
-    /**
79
-     * @return array(Response)
80
-     */
81
-    public function execute()
82
-    {
83
-        $sleepTime = 1000;//microsecond, prevent  CPU 100%
84
-        do {
85
-            curl_multi_exec(self::$multiHandler, $active);
86
-            // bug in PHP 5.3.18+ where curl_multi_select can return -1
87
-            // https://bugs.php.net/bug.php?id=63411
88
-            if (curl_multi_select(self::$multiHandler) == -1) {
89
-                usleep($sleepTime);
90
-            }
91
-            usleep($sleepTime);
92
-        } while ($active);
93
-        $return = array();
94
-        foreach (self::$requestPool as $request) {
95
-            $response = $request->makeResponse(true);
96
-            $func = $response->request->endCallback();
97
-            if (isset($func)) {
98
-                $func($response);
99
-            }
100
-            $return[] = $response;
101
-            curl_multi_remove_handle(self::$multiHandler, $request->curlHandle);
102
-            curl_close($request->curlHandle);
103
-        }
104
-        curl_multi_close(self::$multiHandler);
105
-        self::$requestPool = null;
106
-        return $return;
107
-    }
78
+	/**
79
+	 * @return array(Response)
80
+	 */
81
+	public function execute()
82
+	{
83
+		$sleepTime = 1000;//microsecond, prevent  CPU 100%
84
+		do {
85
+			curl_multi_exec(self::$multiHandler, $active);
86
+			// bug in PHP 5.3.18+ where curl_multi_select can return -1
87
+			// https://bugs.php.net/bug.php?id=63411
88
+			if (curl_multi_select(self::$multiHandler) == -1) {
89
+				usleep($sleepTime);
90
+			}
91
+			usleep($sleepTime);
92
+		} while ($active);
93
+		$return = array();
94
+		foreach (self::$requestPool as $request) {
95
+			$response = $request->makeResponse(true);
96
+			$func = $response->request->endCallback();
97
+			if (isset($func)) {
98
+				$func($response);
99
+			}
100
+			$return[] = $response;
101
+			curl_multi_remove_handle(self::$multiHandler, $request->curlHandle);
102
+			curl_close($request->curlHandle);
103
+		}
104
+		curl_multi_close(self::$multiHandler);
105
+		self::$requestPool = null;
106
+		return $return;
107
+	}
108 108
 
109 109
 }
Please login to merge, or discard this patch.