<?php/** This file is part of the overtrue/wechat.** (c) overtrue <i@overtrue.me>** This source file is subject to the MIT license that is bundled* with this source code in the file LICENSE.*/namespace EasyWeChat\Kernel\Traits;use GuzzleHttp\Client;use GuzzleHttp\ClientInterface;use GuzzleHttp\HandlerStack;use Psr\Http\Message\ResponseInterface;/*** Trait HasHttpRequests.** @author overtrue <i@overtrue.me>*/trait HasHttpRequests{use ResponseCastable;/*** @var \GuzzleHttp\ClientInterface*/protected $httpClient;/*** @var array*/protected $middlewares = [];/*** @var \GuzzleHttp\HandlerStack*/protected $handlerStack;/*** @var array*/protected static $defaults = ['curl' => [CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,],];/*** Set guzzle default settings.** @param array $defaults*/public static function setDefaultOptions($defaults = []){self::$defaults = $defaults;}/*** Return current guzzle default settings.** @return array*/public static function getDefaultOptions(): array{return self::$defaults;}/*** Set GuzzleHttp\Client.** @param \GuzzleHttp\ClientInterface $httpClient** @return $this*/public function setHttpClient(ClientInterface $httpClient){$this->httpClient = $httpClient;return $this;}/*** Return GuzzleHttp\ClientInterface instance.** @return ClientInterface*/public function getHttpClient(): ClientInterface{if (!($this->httpClient instanceof ClientInterface)) {if (property_exists($this, 'app') && $this->app['http_client']) {$this->httpClient = $this->app['http_client'];} else {$this->httpClient = new Client(['handler' => HandlerStack::create($this->getGuzzleHandler())]);}}return $this->httpClient;}/*** Add a middleware.** @param callable $middleware* @param string $name** @return $this*/public function pushMiddleware(callable $middleware, string $name = null){if (!is_null($name)) {$this->middlewares[$name] = $middleware;} else {array_push($this->middlewares, $middleware);}return $this;}/*** Return all middlewares.** @return array*/public function getMiddlewares(): array{return $this->middlewares;}/*** Make a request.** @param string $url* @param string $method* @param array $options** @return \Psr\Http\Message\ResponseInterface** @throws \GuzzleHttp\Exception\GuzzleException*/public function request($url, $method = 'GET', $options = []): ResponseInterface{$method = strtoupper($method);$options = array_merge(self::$defaults, $options, ['handler' => $this->getHandlerStack()]);$options = $this->fixJsonIssue($options);if (property_exists($this, 'baseUri') && !is_null($this->baseUri)) {$options['base_uri'] = $this->baseUri;}$response = $this->getHttpClient()->request($method, $url, $options);$response->getBody()->rewind();return $response;}/*** @param \GuzzleHttp\HandlerStack $handlerStack** @return $this*/public function setHandlerStack(HandlerStack $handlerStack){$this->handlerStack = $handlerStack;return $this;}/*** Build a handler stack.** @return \GuzzleHttp\HandlerStack*/public function getHandlerStack(): HandlerStack{if ($this->handlerStack) {return $this->handlerStack;}$this->handlerStack = HandlerStack::create($this->getGuzzleHandler());foreach ($this->middlewares as $name => $middleware) {$this->handlerStack->push($middleware, $name);}return $this->handlerStack;}/*** @param array $options** @return array*/protected function fixJsonIssue(array $options): array{if (isset($options['json']) && is_array($options['json'])) {$options['headers'] = array_merge($options['headers'] ?? [], ['Content-Type' => 'application/json']);if (empty($options['json'])) {$options['body'] = \GuzzleHttp\json_encode($options['json'], JSON_FORCE_OBJECT);} else {$options['body'] = \GuzzleHttp\json_encode($options['json'], JSON_UNESCAPED_UNICODE);}unset($options['json']);}return $options;}/*** Get guzzle handler.** @return callable*/protected function getGuzzleHandler(){if (property_exists($this, 'app') && isset($this->app['guzzle_handler'])) {return is_string($handler = $this->app->raw('guzzle_handler'))? new $handler(): $handler;}return \GuzzleHttp\choose_handler();}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。