コード例 #1
0
 private function add_debug(RequestInterface $request, &$options, $value, &$params)
 {
     if ($value === false) {
         return;
     }
     static $map = [STREAM_NOTIFY_CONNECT => 'CONNECT', STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', STREAM_NOTIFY_PROGRESS => 'PROGRESS', STREAM_NOTIFY_FAILURE => 'FAILURE', STREAM_NOTIFY_COMPLETED => 'COMPLETED', STREAM_NOTIFY_RESOLVE => 'RESOLVE'];
     static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max'];
     $value = \GuzzleHttp\debug_resource($value);
     $ident = $request->getMethod() . ' ' . $request->getUri();
     $this->addNotification($params, function () use($ident, $value, $map, $args) {
         $passed = func_get_args();
         $code = array_shift($passed);
         fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
         foreach (array_filter($passed) as $i => $v) {
             fwrite($value, $args[$i] . ': "' . $v . '" ');
         }
         fwrite($value, "\n");
     });
 }
コード例 #2
0
 private function applyHandlerOptions(EasyHandle $easy, array &$conf)
 {
     $options = $easy->options;
     if (isset($options['verify'])) {
         if ($options['verify'] === false) {
             unset($conf[CURLOPT_CAINFO]);
             $conf[CURLOPT_SSL_VERIFYHOST] = 0;
             $conf[CURLOPT_SSL_VERIFYPEER] = false;
         } else {
             $conf[CURLOPT_SSL_VERIFYHOST] = 2;
             $conf[CURLOPT_SSL_VERIFYPEER] = true;
             if (is_string($options['verify'])) {
                 $conf[CURLOPT_CAINFO] = $options['verify'];
                 if (!file_exists($options['verify'])) {
                     throw new \InvalidArgumentException("SSL CA bundle not found: {$options['verify']}");
                 }
             }
         }
     }
     if (!empty($options['decode_content'])) {
         $accept = $easy->request->getHeaderLine('Accept-Encoding');
         if ($accept) {
             $conf[CURLOPT_ENCODING] = $accept;
         } else {
             $conf[CURLOPT_ENCODING] = '';
             // Don't let curl send the header over the wire
             $conf[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
         }
     }
     if (isset($options['sink'])) {
         $sink = $options['sink'];
         if (!is_string($sink)) {
             $sink = \GuzzleHttp\Psr7\stream_for($sink);
         } elseif (!is_dir(dirname($sink))) {
             // Ensure that the directory exists before failing in curl.
             throw new \RuntimeException(sprintf('Directory %s does not exist for sink value of %s', dirname($sink), $sink));
         } else {
             $sink = new LazyOpenStream($sink, 'w+');
         }
         $easy->sink = $sink;
         $conf[CURLOPT_WRITEFUNCTION] = function ($ch, $write) use($sink) {
             return $sink->write($write);
         };
     } else {
         // Use a default temp stream if no sink was set.
         $conf[CURLOPT_FILE] = fopen('php://temp', 'w+');
         $easy->sink = Psr7\stream_for($conf[CURLOPT_FILE]);
     }
     if (isset($options['timeout'])) {
         $conf[CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000;
     }
     if (isset($options['connect_timeout'])) {
         $conf[CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000;
     }
     if (isset($options['proxy'])) {
         if (!is_array($options['proxy'])) {
             $conf[CURLOPT_PROXY] = $options['proxy'];
         } elseif ($scheme = $easy->request->getUri()->getScheme()) {
             if (isset($options['proxy'][$scheme])) {
                 $conf[CURLOPT_PROXY] = $options['proxy'][$scheme];
             }
         }
     }
     if (isset($options['cert'])) {
         $cert = $options['cert'];
         if (is_array($cert)) {
             $conf[CURLOPT_SSLCERTPASSWD] = $cert[1];
             $cert = $cert[0];
         }
         if (!file_exists($cert)) {
             throw new \InvalidArgumentException("SSL certificate not found: {$cert}");
         }
         $conf[CURLOPT_SSLCERT] = $cert;
     }
     if (isset($options['ssl_key'])) {
         $sslKey = $options['ssl_key'];
         if (is_array($sslKey)) {
             $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1];
             $sslKey = $sslKey[0];
         }
         if (!file_exists($sslKey)) {
             throw new \InvalidArgumentException("SSL private key not found: {$sslKey}");
         }
         $conf[CURLOPT_SSLKEY] = $sslKey;
     }
     if (isset($options['progress'])) {
         $progress = $options['progress'];
         if (!is_callable($progress)) {
             throw new \InvalidArgumentException('progress client option must be callable');
         }
         $conf[CURLOPT_NOPROGRESS] = false;
         $conf[CURLOPT_PROGRESSFUNCTION] = function () use($progress) {
             $args = func_get_args();
             // PHP 5.5 pushed the handle onto the start of the args
             if (is_resource($args[0])) {
                 array_shift($args);
             }
             call_user_func_array($progress, $args);
         };
     }
     if (!empty($options['debug'])) {
         $conf[CURLOPT_STDERR] = \GuzzleHttp\debug_resource($options['debug']);
         $conf[CURLOPT_VERBOSE] = true;
     }
 }