| Total Complexity | 54 | 
| Total Lines | 761 | 
| Duplicated Lines | 0 % | 
| Changes | 0 | ||
Complex classes like Request often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Request, and based on these observations, apply Extract Interface, too.
| 1 | <?php  | 
            ||
| 27 | class Request  | 
            ||
| 28 | {
 | 
            ||
| 29 | /**  | 
            ||
| 30 | * Request::$curlAutoClose  | 
            ||
| 31 | *  | 
            ||
| 32 | * Flag for automatic close the connection when it has finished processing  | 
            ||
| 33 | * and not be pooled for reuse.  | 
            ||
| 34 | *  | 
            ||
| 35 | * @var bool  | 
            ||
| 36 | */  | 
            ||
| 37 | public $curlAutoClose = true;  | 
            ||
| 38 | /**  | 
            ||
| 39 | * Request::$uri  | 
            ||
| 40 | *  | 
            ||
| 41 | * Request uri instance.  | 
            ||
| 42 | *  | 
            ||
| 43 | * @var Uri  | 
            ||
| 44 | */  | 
            ||
| 45 | protected $uri;  | 
            ||
| 46 | |||
| 47 | /**  | 
            ||
| 48 | * Request::$curlOptions  | 
            ||
| 49 | *  | 
            ||
| 50 | * Request Curl handle options.  | 
            ||
| 51 | *  | 
            ||
| 52 | * @var array  | 
            ||
| 53 | */  | 
            ||
| 54 | protected $curlOptions;  | 
            ||
| 55 | /**  | 
            ||
| 56 | * Request::$curlHeaders  | 
            ||
| 57 | *  | 
            ||
| 58 | * Request Curl handle headers.  | 
            ||
| 59 | *  | 
            ||
| 60 | * @var array  | 
            ||
| 61 | */  | 
            ||
| 62 | protected $curlHeaders = [];  | 
            ||
| 63 | |||
| 64 | // ------------------------------------------------------------------------  | 
            ||
| 65 | |||
| 66 | /**  | 
            ||
| 67 | * Request::__construct  | 
            ||
| 68 | *  | 
            ||
| 69 | * @throws \O2System\Spl\Exceptions\Logic\BadFunctionCall\BadPhpExtensionCallException  | 
            ||
| 70 | */  | 
            ||
| 71 | public function __construct()  | 
            ||
| 100 | }  | 
            ||
| 101 | |||
| 102 | // ------------------------------------------------------------------------  | 
            ||
| 103 | |||
| 104 | /**  | 
            ||
| 105 | * Request::setOptions  | 
            ||
| 106 | *  | 
            ||
| 107 | * Sets curl options.  | 
            ||
| 108 | *  | 
            ||
| 109 | * @see http://php.net/manual/en/function.curl-setopt.php  | 
            ||
| 110 | *  | 
            ||
| 111 | * @param array $options  | 
            ||
| 112 | *  | 
            ||
| 113 | * @return static  | 
            ||
| 114 | */  | 
            ||
| 115 | public function setOptions(array $options)  | 
            ||
| 116 |     {
 | 
            ||
| 117 |         foreach ($options as $option => $value) {
 | 
            ||
| 118 | $this->setOption($option, $value);  | 
            ||
| 119 | }  | 
            ||
| 120 | |||
| 121 | return $this;  | 
            ||
| 122 | }  | 
            ||
| 123 | |||
| 124 | // ------------------------------------------------------------------------  | 
            ||
| 125 | |||
| 126 | /**  | 
            ||
| 127 | * Request::setOption  | 
            ||
| 128 | *  | 
            ||
| 129 | * Sets custom curl option.  | 
            ||
| 130 | *  | 
            ||
| 131 | * @see http://php.net/manual/en/function.curl-setopt.php  | 
            ||
| 132 | *  | 
            ||
| 133 | * @param int $option The curl option number.  | 
            ||
| 134 | * @param mixed $value The value of curl option.  | 
            ||
| 135 | *  | 
            ||
| 136 | * @return static  | 
            ||
| 137 | */  | 
            ||
| 138 | public function setOption($option, $value)  | 
            ||
| 139 |     {
 | 
            ||
| 140 | $this->curlOptions[ $option ] = $value;  | 
            ||
| 141 | |||
| 142 | return $this;  | 
            ||
| 143 | }  | 
            ||
| 144 | |||
| 145 | // ------------------------------------------------------------------------  | 
            ||
| 146 | |||
| 147 | /**  | 
            ||
| 148 | * Request::setUri  | 
            ||
| 149 | *  | 
            ||
| 150 | * @param \O2System\Psr\Http\Message\UriInterface $uri  | 
            ||
| 151 | *  | 
            ||
| 152 | * @return static  | 
            ||
| 153 | */  | 
            ||
| 154 | public function setUri(UriInterface $uri)  | 
            ||
| 155 |     {
 | 
            ||
| 156 | $this->uri = $uri;  | 
            ||
| 
                                                                                                    
                        
                         | 
                |||
| 157 | |||
| 158 | return $this;  | 
            ||
| 159 | }  | 
            ||
| 160 | |||
| 161 | // ------------------------------------------------------------------------  | 
            ||
| 162 | |||
| 163 | /**  | 
            ||
| 164 | * Request::setHttpVersion  | 
            ||
| 165 | *  | 
            ||
| 166 | * Sets which http version to use (default, lets CURL decide which version to use).  | 
            ||
| 167 | *  | 
            ||
| 168 | * @param int $httpVersion Supported encodings are "CURL_HTTP_VERSION_NONE", "CURL_HTTP_VERSION_1_0",  | 
            ||
| 169 | * "CURL_HTTP_VERSION_1_1", and "CURL_HTTP_VERSION_2".  | 
            ||
| 170 | *  | 
            ||
| 171 | * @return static  | 
            ||
| 172 | */  | 
            ||
| 173 | public function setHttpVersion($httpVersion)  | 
            ||
| 174 |     {
 | 
            ||
| 175 | if (in_array($httpVersion, [  | 
            ||
| 176 | CURL_HTTP_VERSION_NONE,  | 
            ||
| 177 | CURL_HTTP_VERSION_1_0,  | 
            ||
| 178 | CURL_HTTP_VERSION_1_1,  | 
            ||
| 179 | CURL_HTTP_VERSION_2,  | 
            ||
| 180 | ]  | 
            ||
| 181 |         )) {
 | 
            ||
| 182 | $this->curlOptions[ CURLOPT_HTTP_VERSION ] = $httpVersion;  | 
            ||
| 183 | }  | 
            ||
| 184 | |||
| 185 | return $this;  | 
            ||
| 186 | }  | 
            ||
| 187 | |||
| 188 | // ------------------------------------------------------------------------  | 
            ||
| 189 | |||
| 190 | /**  | 
            ||
| 191 | * Request::setUserAgent  | 
            ||
| 192 | *  | 
            ||
| 193 | * Sets the contents of the "User-Agent: " header to be used in a HTTP request.  | 
            ||
| 194 | *  | 
            ||
| 195 | * @param string $userAgent  | 
            ||
| 196 | *  | 
            ||
| 197 | * @return static  | 
            ||
| 198 | */  | 
            ||
| 199 | public function setUserAgent($userAgent)  | 
            ||
| 200 |     {
 | 
            ||
| 201 | $this->curlOptions[ CURLOPT_USERAGENT ] = trim($userAgent);  | 
            ||
| 202 | |||
| 203 | return $this;  | 
            ||
| 204 | }  | 
            ||
| 205 | |||
| 206 | // ------------------------------------------------------------------------  | 
            ||
| 207 | |||
| 208 | /**  | 
            ||
| 209 | * Request::setReferer  | 
            ||
| 210 | *  | 
            ||
| 211 | * Sets the contents of the "Referer: " header to be used in a HTTP request.  | 
            ||
| 212 | *  | 
            ||
| 213 | * @param string $referer  | 
            ||
| 214 | *  | 
            ||
| 215 | * @return static  | 
            ||
| 216 | */  | 
            ||
| 217 | public function setReferer($referer)  | 
            ||
| 218 |     {
 | 
            ||
| 219 | $this->curlOptions[ CURLOPT_REFERER ] = trim($referer);  | 
            ||
| 220 | |||
| 221 | return $this;  | 
            ||
| 222 | }  | 
            ||
| 223 | |||
| 224 | // ------------------------------------------------------------------------  | 
            ||
| 225 | |||
| 226 | /**  | 
            ||
| 227 | * Request::setEncoding  | 
            ||
| 228 | *  | 
            ||
| 229 | * Sets the contents of the "Accept-Encoding: " header. This enables decoding of the response.  | 
            ||
| 230 | * Supported encodings are "identity", "deflate", and "gzip".  | 
            ||
| 231 | * If an empty string, "", is set, a header containing all supported encoding types is sent.  | 
            ||
| 232 | *  | 
            ||
| 233 | * @param string $encoding Supported encodings are "identity", "deflate", and "gzip".  | 
            ||
| 234 | *  | 
            ||
| 235 | * @return static  | 
            ||
| 236 | */  | 
            ||
| 237 | public function setEncoding($encoding)  | 
            ||
| 238 |     {
 | 
            ||
| 239 |         if (in_array($encoding, ['identity', 'deflate', 'gzip'])) {
 | 
            ||
| 240 | $this->curlOptions[ CURLOPT_ENCODING ] = $encoding;  | 
            ||
| 241 |         } else {
 | 
            ||
| 242 | $this->curlOptions[ CURLOPT_ENCODING ] = '';  | 
            ||
| 243 | }  | 
            ||
| 244 | |||
| 245 | return $this;  | 
            ||
| 246 | }  | 
            ||
| 247 | |||
| 248 | // ------------------------------------------------------------------------  | 
            ||
| 249 | |||
| 250 | /**  | 
            ||
| 251 | * Request::setTimeout  | 
            ||
| 252 | *  | 
            ||
| 253 | * Sets the maximum number of seconds to allow cURL functions to execute.  | 
            ||
| 254 | *  | 
            ||
| 255 | * @param int $timeout The number of seconds.  | 
            ||
| 256 | * @param bool $isMilliseconds The number units is uses milliseconds format.  | 
            ||
| 257 | *  | 
            ||
| 258 | * @return static  | 
            ||
| 259 | */  | 
            ||
| 260 | public function setTimeout($timeout, $isMilliseconds = false)  | 
            ||
| 261 |     {
 | 
            ||
| 262 |         if ($isMilliseconds) {
 | 
            ||
| 263 | $this->curlOptions[ CURLOPT_TIMEOUT_MS ] = (int)$timeout;  | 
            ||
| 264 |         } else {
 | 
            ||
| 265 | $this->curlOptions[ CURLOPT_TIMEOUT ] = (int)$timeout;  | 
            ||
| 266 | }  | 
            ||
| 267 | |||
| 268 | return $this;  | 
            ||
| 269 | }  | 
            ||
| 270 | |||
| 271 | // ------------------------------------------------------------------------  | 
            ||
| 272 | |||
| 273 | /**  | 
            ||
| 274 | * Request::setConnectionTimeout  | 
            ||
| 275 | *  | 
            ||
| 276 | * Sets the number of seconds to wait while trying to connect. Use 0 to wait indefinitely.  | 
            ||
| 277 | *  | 
            ||
| 278 | * @param int $timeout The number of seconds.  | 
            ||
| 279 | * @param bool $isMilliseconds The number units is uses milliseconds format.  | 
            ||
| 280 | *  | 
            ||
| 281 | * @return static  | 
            ||
| 282 | */  | 
            ||
| 283 | public function setConnectionTimeout($timeout, $isMilliseconds = false)  | 
            ||
| 284 |     {
 | 
            ||
| 285 |         if ($isMilliseconds) {
 | 
            ||
| 286 | $this->curlOptions[ CURLOPT_CONNECTTIMEOUT_MS ] = (int)$timeout;  | 
            ||
| 287 |         } else {
 | 
            ||
| 288 | $this->curlOptions[ CURLOPT_CONNECTTIMEOUT ] = (int)$timeout;  | 
            ||
| 289 | }  | 
            ||
| 290 | |||
| 291 | return $this;  | 
            ||
| 292 | }  | 
            ||
| 293 | |||
| 294 | // ------------------------------------------------------------------------  | 
            ||
| 295 | |||
| 296 | /**  | 
            ||
| 297 | * Request::setMaximumRedirects  | 
            ||
| 298 | *  | 
            ||
| 299 | * Sets the maximum amount of HTTP redirections to follow. Use this option alongside CURLOPT_FOLLOWLOCATION.  | 
            ||
| 300 | *  | 
            ||
| 301 | * @param string $maximum The numbers of maximum redirections.  | 
            ||
| 302 | *  | 
            ||
| 303 | * @return static  | 
            ||
| 304 | */  | 
            ||
| 305 | public function setMaximumRedirects($maximum)  | 
            ||
| 306 |     {
 | 
            ||
| 307 | $this->curlOptions[ CURLOPT_MAXREDIRS ] = (int)$maximum;  | 
            ||
| 308 | $this->curlOptions[ CURLOPT_FOLLOWLOCATION ] = true;  | 
            ||
| 309 | |||
| 310 | return $this;  | 
            ||
| 311 | }  | 
            ||
| 312 | |||
| 313 | // ------------------------------------------------------------------------  | 
            ||
| 314 | |||
| 315 | /**  | 
            ||
| 316 | * Request::setSslCaInfo  | 
            ||
| 317 | *  | 
            ||
| 318 | * Sets the name of a file holding one or more certificates to verify the peer with.  | 
            ||
| 319 | * It's also set the curl options:  | 
            ||
| 320 | * 1. CURLOPT_SSL_VERIFYPEER value into TRUE.  | 
            ||
| 321 | * 2. CURLOPT_SSL_VERIFYHOST value into 2 to check the existence of a common name and also verify that it matches  | 
            ||
| 322 | * the hostname provided.  | 
            ||
| 323 | * 3. CURLOPT_SSL_VERIFYSTATUS value into TRUE to verify the certificate status.  | 
            ||
| 324 | *  | 
            ||
| 325 | * @param string $caInfoFilePath Path to ssl certificate file.  | 
            ||
| 326 | *  | 
            ||
| 327 | * @return static  | 
            ||
| 328 | */  | 
            ||
| 329 | public function setSslCaInfo($caInfoFilePath)  | 
            ||
| 330 |     {
 | 
            ||
| 331 |         if (is_file($caInfoFilePath)) {
 | 
            ||
| 332 | $this->setSslVerify(2, true);  | 
            ||
| 333 | $this->curlOptions[ CURLOPT_CAINFO ] = pathinfo($caInfoFilePath, PATHINFO_BASENAME);  | 
            ||
| 334 | $this->curlOptions[ CURLOPT_CAPATH ] = dirname($caInfoFilePath);  | 
            ||
| 335 | }  | 
            ||
| 336 | |||
| 337 | return $this;  | 
            ||
| 338 | }  | 
            ||
| 339 | |||
| 340 | // ------------------------------------------------------------------------  | 
            ||
| 341 | |||
| 342 | /**  | 
            ||
| 343 | * Request::setSslVerify  | 
            ||
| 344 | *  | 
            ||
| 345 | * Sets the SSL Verify Peer into TRUE.  | 
            ||
| 346 | *  | 
            ||
| 347 | * @param int $verifyHost 0. To not check the names. In production environments the value of this option should  | 
            ||
| 348 | * be kept at 2 (default value).  | 
            ||
| 349 | * 1. To check the existence of a common name in the SSL peer certificate.  | 
            ||
| 350 | * 2. To check the existence of a common name and also verify that it matches the  | 
            ||
| 351 | * hostname provided.  | 
            ||
| 352 | * @param bool $verifyStatus TRUE to verify the certificate's status.  | 
            ||
| 353 | *  | 
            ||
| 354 | * @return static  | 
            ||
| 355 | */  | 
            ||
| 356 | public function setSslVerify($verifyHost, $verifyStatus = false)  | 
            ||
| 357 |     {
 | 
            ||
| 358 | $this->curlOptions[ CURLOPT_SSL_VERIFYPEER ] = true;  | 
            ||
| 359 | |||
| 360 | $verifyHost = in_array($verifyHost, range(0, 3)) ? $verifyHost : 0;  | 
            ||
| 361 | $this->curlOptions[ CURLOPT_SSL_VERIFYHOST ] = (int)$verifyHost;  | 
            ||
| 362 | $this->curlOptions[ CURLOPT_SSL_VERIFYSTATUS ] = (bool)$verifyStatus;  | 
            ||
| 363 | |||
| 364 | return $this;  | 
            ||
| 365 | }  | 
            ||
| 366 | |||
| 367 | // ------------------------------------------------------------------------  | 
            ||
| 368 | |||
| 369 | /**  | 
            ||
| 370 | * Request::setAuthentication  | 
            ||
| 371 | *  | 
            ||
| 372 | * Sets the HTTP authentication method(s) to use.  | 
            ||
| 373 | *  | 
            ||
| 374 | * @param string $username The HTTP authentication username.  | 
            ||
| 375 | * @param string $password The HTTP authentication password.  | 
            ||
| 376 | * @param int|string $method The HTTP authentication method. The options are:  | 
            ||
| 377 | * 1. CURLAUTH_BASIC  | 
            ||
| 378 | * 2. CURLAUTH_DIGEST  | 
            ||
| 379 | * 3. CURLAUTH_GSSNEGOTIATE  | 
            ||
| 380 | * 4. CURLAUTH_NTLM  | 
            ||
| 381 | * 5. CURLAUTH_ANY (default)  | 
            ||
| 382 | * 6. CURLAUTH_ANYSAFE  | 
            ||
| 383 | *  | 
            ||
| 384 | * @return static  | 
            ||
| 385 | */  | 
            ||
| 386 | public function setAuthentication($username = '', $password = '', $method = CURLAUTH_ANY)  | 
            ||
| 387 |     {
 | 
            ||
| 388 |         if (defined('CURLOPT_USERNAME')) {
 | 
            ||
| 389 | $this->curlOptions[ CURLOPT_USERNAME ] = $username;  | 
            ||
| 390 | }  | 
            ||
| 391 | |||
| 392 | $this->curlOptions[ CURLOPT_USERPWD ] = "$username:$password";  | 
            ||
| 393 | $this->curlOptions[ CURLOPT_HTTPAUTH ] = CURLAUTH_ANY;  | 
            ||
| 394 | |||
| 395 | if (in_array($method, [  | 
            ||
| 396 | CURLAUTH_BASIC,  | 
            ||
| 397 | CURLAUTH_DIGEST,  | 
            ||
| 398 | CURLAUTH_GSSNEGOTIATE,  | 
            ||
| 399 | CURLAUTH_NTLM,  | 
            ||
| 400 | CURLAUTH_ANY,  | 
            ||
| 401 | CURLAUTH_ANYSAFE,  | 
            ||
| 402 |         ])) {
 | 
            ||
| 403 | $this->curlOptions[ CURLOPT_HTTPAUTH ] = $method;  | 
            ||
| 404 | }  | 
            ||
| 405 | |||
| 406 | return $this;  | 
            ||
| 407 | }  | 
            ||
| 408 | |||
| 409 | // ------------------------------------------------------------------------  | 
            ||
| 410 | |||
| 411 | /**  | 
            ||
| 412 | * Request::setProxy  | 
            ||
| 413 | *  | 
            ||
| 414 | * Set the HTTP proxy to tunnel requests through.  | 
            ||
| 415 | *  | 
            ||
| 416 | * @param string $address The HTTP proxy address.  | 
            ||
| 417 | * @param int|string $port The HTTP proxy port.  | 
            ||
| 418 | * @param int|string $type The HTTP proxy type, available options:  | 
            ||
| 419 | * 1. CURLPROXY_HTTP  | 
            ||
| 420 | * 2. CURLPROXY_HTTP_1_0  | 
            ||
| 421 | * 3. CURLPROXY_SOCKS4  | 
            ||
| 422 | * 4. CURLPROXY_SOCKS5  | 
            ||
| 423 | * 5. CURLPROXY_SOCKS4A  | 
            ||
| 424 | * 6. CURLPROXY_SOCKS5_HOSTNAME  | 
            ||
| 425 | *  | 
            ||
| 426 | * @return static  | 
            ||
| 427 | */  | 
            ||
| 428 | public function setProxy($address, $port = 1080, $type = CURLPROXY_HTTP)  | 
            ||
| 429 |     {
 | 
            ||
| 430 | $this->curlOptions[ CURLOPT_PROXY ] = $address;  | 
            ||
| 431 | $this->curlOptions[ CURLOPT_PROXYPORT ] = $port;  | 
            ||
| 432 | $this->curlOptions[ CURLOPT_PROXYTYPE ] = $type;  | 
            ||
| 433 | $this->curlOptions[ CURLOPT_HTTPPROXYTUNNEL ] = true;  | 
            ||
| 434 | |||
| 435 | return $this;  | 
            ||
| 436 | }  | 
            ||
| 437 | |||
| 438 | // ------------------------------------------------------------------------  | 
            ||
| 439 | |||
| 440 | /**  | 
            ||
| 441 | * Request::setProxyAuthentication  | 
            ||
| 442 | *  | 
            ||
| 443 | * Sets the username and password to use for the connection to the proxy.  | 
            ||
| 444 | *  | 
            ||
| 445 | * @param string $username The HTTP Proxy authentication username.  | 
            ||
| 446 | * @param string $password The HTTP Proxy authentication password.  | 
            ||
| 447 | * @param int|string $method The HTTP Proxy authentication method. The options are:  | 
            ||
| 448 | * 1. CURLAUTH_BASIC  | 
            ||
| 449 | * 2. CURLAUTH_NTLM  | 
            ||
| 450 | *  | 
            ||
| 451 | * @return static  | 
            ||
| 452 | */  | 
            ||
| 453 | public function setProxyAuthentication($username, $password, $method = CURLAUTH_BASIC)  | 
            ||
| 469 | }  | 
            ||
| 470 | |||
| 471 | // ------------------------------------------------------------------------  | 
            ||
| 472 | |||
| 473 | /**  | 
            ||
| 474 | * Request::setHeaders  | 
            ||
| 475 | *  | 
            ||
| 476 | * Sets curl request with headers.  | 
            ||
| 477 | *  | 
            ||
| 478 | * @param array $headers  | 
            ||
| 479 | *  | 
            ||
| 480 | * @return static  | 
            ||
| 481 | */  | 
            ||
| 482 | public function setHeaders(array $headers)  | 
            ||
| 483 |     {
 | 
            ||
| 484 |         foreach ($headers as $name => $value) {
 | 
            ||
| 485 | $this->addHeader($name, $value);  | 
            ||
| 486 | }  | 
            ||
| 487 | |||
| 488 | return $this;  | 
            ||
| 489 | }  | 
            ||
| 490 | |||
| 491 | // ------------------------------------------------------------------------  | 
            ||
| 492 | |||
| 493 | /**  | 
            ||
| 494 | * Request::addHeader  | 
            ||
| 495 | *  | 
            ||
| 496 | * Add curl request header.  | 
            ||
| 497 | *  | 
            ||
| 498 | * @param string $name Case-insensitive header field name.  | 
            ||
| 499 | * @param string|string[] $value Header value(s).  | 
            ||
| 500 | *  | 
            ||
| 501 | * @return static  | 
            ||
| 502 | */  | 
            ||
| 503 | public function addHeader($name, $value)  | 
            ||
| 504 |     {
 | 
            ||
| 505 | $this->curlHeaders[ $name ] = $value;  | 
            ||
| 506 | |||
| 507 | return $this;  | 
            ||
| 508 | }  | 
            ||
| 509 | |||
| 510 | // ------------------------------------------------------------------------  | 
            ||
| 511 | |||
| 512 | /**  | 
            ||
| 513 | * Request::setCookie  | 
            ||
| 514 | *  | 
            ||
| 515 | * Sets the cookie contents to be used in the HTTP request.  | 
            ||
| 516 | *  | 
            ||
| 517 | * @param string $cookieFile The contents of the "Cookie: " header to be used in the HTTP request.  | 
            ||
| 518 | * Note that multiple cookies are separated with a semicolon followed by a space  | 
            ||
| 519 | * (e.g., "fruit=apple; colour=red")  | 
            ||
| 520 | *  | 
            ||
| 521 | * @return static  | 
            ||
| 522 | */  | 
            ||
| 523 | public function setCookie($cookie)  | 
            ||
| 524 |     {
 | 
            ||
| 525 | $this->curlOptions[ CURLOPT_COOKIE ] = $cookie;  | 
            ||
| 526 | |||
| 527 | return $this;  | 
            ||
| 528 | }  | 
            ||
| 529 | |||
| 530 | // ------------------------------------------------------------------------  | 
            ||
| 531 | |||
| 532 | /**  | 
            ||
| 533 | * Request::setCookieFile  | 
            ||
| 534 | *  | 
            ||
| 535 | * Sets the cookie file to be used in the HTTP request.  | 
            ||
| 536 | *  | 
            ||
| 537 | * @param string $cookieFile The name of the file containing the cookie data.  | 
            ||
| 538 | * @param string|null $cookieJar The name of a file to save all internal cookies to when the handle is closed,  | 
            ||
| 539 | * e.g. after a call to curl_close.  | 
            ||
| 540 | *  | 
            ||
| 541 | * @return static  | 
            ||
| 542 | */  | 
            ||
| 543 | public function setCookieFile($cookieFile, $cookieJar = null)  | 
            ||
| 544 |     {
 | 
            ||
| 545 |         if (is_file($cookieFile)) {
 | 
            ||
| 546 | $cookieJar = empty($cookieJar) ? $cookieFile : $cookieJar;  | 
            ||
| 547 | $this->curlOptions[ CURLOPT_COOKIEFILE ] = $cookieFile;  | 
            ||
| 548 | $this->curlOptions[ CURLOPT_COOKIEJAR ] = $cookieJar;  | 
            ||
| 549 | }  | 
            ||
| 550 | |||
| 551 | return $this;  | 
            ||
| 552 | }  | 
            ||
| 553 | |||
| 554 | // ------------------------------------------------------------------------  | 
            ||
| 555 | |||
| 556 | /**  | 
            ||
| 557 | * Request::get  | 
            ||
| 558 | *  | 
            ||
| 559 | * Get response use HTTP GET request method.  | 
            ||
| 560 | *  | 
            ||
| 561 | * @param array $query Additional HTTP GET query.  | 
            ||
| 562 | *  | 
            ||
| 563 | * @return bool|\O2System\Curl\Response  | 
            ||
| 564 | */  | 
            ||
| 565 | public function get(array $query = [])  | 
            ||
| 566 |     {
 | 
            ||
| 567 | $this->uri = $this->uri->withQuery($query);  | 
            ||
| 568 | |||
| 569 | $this->curlOptions[ CURLOPT_HTTPGET ] = true;  | 
            ||
| 570 | |||
| 571 | return $this->getResponse();  | 
            ||
| 572 | }  | 
            ||
| 573 | |||
| 574 | // ------------------------------------------------------------------------  | 
            ||
| 575 | |||
| 576 | /**  | 
            ||
| 577 | * Request::getResponse  | 
            ||
| 578 | *  | 
            ||
| 579 | * Get curl response.  | 
            ||
| 580 | *  | 
            ||
| 581 | * @return Response|bool  | 
            ||
| 582 | */  | 
            ||
| 583 | public function getResponse()  | 
            ||
| 613 | }  | 
            ||
| 614 | |||
| 615 | // ------------------------------------------------------------------------  | 
            ||
| 616 | |||
| 617 | /**  | 
            ||
| 618 | * Request::post  | 
            ||
| 619 | *  | 
            ||
| 620 | * Get response use HTTP POST request method.  | 
            ||
| 621 | *  | 
            ||
| 622 | * @param array $fields Additional HTTP POST fields.  | 
            ||
| 623 | *  | 
            ||
| 624 | * @return bool|\O2System\Curl\Response  | 
            ||
| 625 | */  | 
            ||
| 626 | public function post(array $fields = [], $json = false)  | 
            ||
| 627 |     {
 | 
            ||
| 628 | $this->curlOptions[ CURLOPT_POST ] = true;  | 
            ||
| 629 | |||
| 630 |         if ($json === true) {
 | 
            ||
| 631 | $this->curlOptions[ CURLOPT_POSTFIELDS ] = json_encode($fields);  | 
            ||
| 632 |             $this->addHeader('Content-Type', 'application/json');
 | 
            ||
| 633 |             $this->addHeader('Content-Length', strlen($this->curlOptions[ CURLOPT_POSTFIELDS ]));
 | 
            ||
| 634 |         } else {
 | 
            ||
| 635 | $this->curlOptions[ CURLOPT_POSTFIELDS ] = http_build_query($fields, null, '&', PHP_QUERY_RFC3986);  | 
            ||
| 636 | }  | 
            ||
| 637 | |||
| 638 | return $this->getResponse();  | 
            ||
| 639 | }  | 
            ||
| 640 | |||
| 641 | // ------------------------------------------------------------------------  | 
            ||
| 642 | |||
| 643 | /**  | 
            ||
| 644 | * Request::delete  | 
            ||
| 645 | *  | 
            ||
| 646 | * Get response use custom HTTP DELETE request method.  | 
            ||
| 647 | *  | 
            ||
| 648 | * @param array $fields Additional HTTP POST fields.  | 
            ||
| 649 | *  | 
            ||
| 650 | * @return bool|\O2System\Curl\Response  | 
            ||
| 651 | */  | 
            ||
| 652 | public function delete(array $fields = [])  | 
            ||
| 653 |     {
 | 
            ||
| 654 | $this->curlOptions[ CURLOPT_CUSTOMREQUEST ] = 'DELETE';  | 
            ||
| 655 | |||
| 656 |         if (count($fields)) {
 | 
            ||
| 657 | $this->curlOptions[ CURLOPT_POST ] = true;  | 
            ||
| 658 | $this->curlOptions[ CURLOPT_POSTFIELDS ] = http_build_query($fields, null, '&', PHP_QUERY_RFC3986);  | 
            ||
| 659 | }  | 
            ||
| 660 | |||
| 661 | return $this->getResponse();  | 
            ||
| 662 | }  | 
            ||
| 663 | |||
| 664 | // ------------------------------------------------------------------------  | 
            ||
| 665 | |||
| 666 | /**  | 
            ||
| 667 | * Request::head  | 
            ||
| 668 | *  | 
            ||
| 669 | * Get response use custom HTTP HEAD request method.  | 
            ||
| 670 | *  | 
            ||
| 671 | * @return bool|\O2System\Curl\Response  | 
            ||
| 672 | */  | 
            ||
| 673 | public function head()  | 
            ||
| 674 |     {
 | 
            ||
| 675 | $this->curlOptions[ CURLOPT_CUSTOMREQUEST ] = 'HEAD';  | 
            ||
| 676 | $this->curlOptions[ CURLOPT_HTTPGET ] = true;  | 
            ||
| 677 | $this->curlOptions[ CURLOPT_HEADER ] = true;  | 
            ||
| 678 | $this->curlOptions[ CURLOPT_NOBODY ] = true;  | 
            ||
| 679 | |||
| 680 | return $this->getResponse();  | 
            ||
| 681 | }  | 
            ||
| 682 | |||
| 683 | // ------------------------------------------------------------------------  | 
            ||
| 684 | |||
| 685 | /**  | 
            ||
| 686 | * Request::trace  | 
            ||
| 687 | *  | 
            ||
| 688 | * Get response use custom HTTP TRACE request method.  | 
            ||
| 689 | *  | 
            ||
| 690 | * @return bool|\O2System\Curl\Response  | 
            ||
| 691 | */  | 
            ||
| 692 | public function trace()  | 
            ||
| 693 |     {
 | 
            ||
| 694 | $this->curlOptions[ CURLOPT_CUSTOMREQUEST ] = 'TRACE';  | 
            ||
| 695 | |||
| 696 | return $this->getResponse();  | 
            ||
| 697 | }  | 
            ||
| 698 | |||
| 699 | // ------------------------------------------------------------------------  | 
            ||
| 700 | |||
| 701 | /**  | 
            ||
| 702 | * Request::trace  | 
            ||
| 703 | *  | 
            ||
| 704 | * Get response use custom HTTP OPTIONS request method.  | 
            ||
| 705 | *  | 
            ||
| 706 | * @return bool|\O2System\Curl\Response  | 
            ||
| 707 | */  | 
            ||
| 708 | public function options()  | 
            ||
| 713 | }  | 
            ||
| 714 | |||
| 715 | // ------------------------------------------------------------------------  | 
            ||
| 716 | |||
| 717 | /**  | 
            ||
| 718 | * Request::patch  | 
            ||
| 719 | *  | 
            ||
| 720 | * Get response use custom HTTP PATCH request method.  | 
            ||
| 721 | *  | 
            ||
| 722 | * @return bool|\O2System\Curl\Response  | 
            ||
| 723 | */  | 
            ||
| 724 | public function patch()  | 
            ||
| 725 |     {
 | 
            ||
| 726 | $this->curlOptions[ CURLOPT_CUSTOMREQUEST ] = 'PATCH';  | 
            ||
| 727 | |||
| 728 | return $this->getResponse();  | 
            ||
| 729 | }  | 
            ||
| 730 | |||
| 731 | // ------------------------------------------------------------------------  | 
            ||
| 732 | |||
| 733 | /**  | 
            ||
| 734 | * Request::connect  | 
            ||
| 735 | *  | 
            ||
| 736 | * Get response use custom HTTP CONNECT request method.  | 
            ||
| 737 | *  | 
            ||
| 738 | * @return bool|\O2System\Curl\Response  | 
            ||
| 739 | */  | 
            ||
| 740 | public function connect()  | 
            ||
| 745 | }  | 
            ||
| 746 | |||
| 747 | // ------------------------------------------------------------------------  | 
            ||
| 748 | |||
| 749 | /**  | 
            ||
| 750 | * Request::download  | 
            ||
| 751 | *  | 
            ||
| 752 | * Get response use custom HTTP DOWNLOAD request method.  | 
            ||
| 753 | *  | 
            ||
| 754 | * @return bool|\O2System\Curl\Response  | 
            ||
| 755 | */  | 
            ||
| 756 | public function download()  | 
            ||
| 763 | }  | 
            ||
| 764 | |||
| 765 | // ------------------------------------------------------------------------  | 
            ||
| 766 | |||
| 767 | /**  | 
            ||
| 768 | * Request::getHandle  | 
            ||
| 769 | *  | 
            ||
| 770 | * Gets curl handle resource.  | 
            ||
| 771 | *  | 
            ||
| 772 | * @return resource  | 
            ||
| 773 | */  | 
            ||
| 774 | public function getHandle()  | 
            ||
| 788 | }  | 
            ||
| 789 | }  | 
            
Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a given class or a super-class is assigned to a property that is type hinted more strictly.
Either this assignment is in error or an instanceof check should be added for that assignment.