diff --git a/src/Request/Request.php b/src/Request/Request.php index 407afb6d..20481a84 100644 --- a/src/Request/Request.php +++ b/src/Request/Request.php @@ -81,6 +81,11 @@ abstract class Request implements ArrayAccess */ public $client; + /** + * @var \AlibabaCloud\Client\Clients\Client + */ + public $httpClient; + /** * @var Uri */ @@ -286,6 +291,19 @@ public function client($clientName) return $this; } + + /** + * + * + * @param \AlibabaCloud\Client\Clients\Client $client + * @return $this + */ + public function withHttpClient(\AlibabaCloud\Client\Clients\Client $client) + { + $this->httpClient = $client; + return $this; + } + /** * @return bool * @throws ClientException diff --git a/src/Request/Traits/ClientTrait.php b/src/Request/Traits/ClientTrait.php index 37a2d22e..6fe29880 100644 --- a/src/Request/Traits/ClientTrait.php +++ b/src/Request/Traits/ClientTrait.php @@ -70,6 +70,10 @@ public function credential() */ public function httpClient() { + if ($this->httpClient){ + return $this->httpClient; + } + if (!AlibabaCloud::all()) { if (CredentialsProvider::hasCustomChain()) { CredentialsProvider::customProvider($this->client); diff --git a/tests/Unit/Request/Traits/ClientTraitTest.php b/tests/Unit/Request/Traits/ClientTraitTest.php index b5bbaafc..7a6bc19f 100644 --- a/tests/Unit/Request/Traits/ClientTraitTest.php +++ b/tests/Unit/Request/Traits/ClientTraitTest.php @@ -107,6 +107,17 @@ public function testHttpClient() $request->httpClient(); } + /** + * @throws ClientException + */ + public function testCustomHttpClient() + { + $httpClient = AlibabaCloud::accessKeyClient('key', 'secret') + ->regionId('cn-hangzhou'); + $request = AlibabaCloud::rpc()->withHttpClient($httpClient); + self::assertEquals($httpClient,$request->httpClient); + } + /** * @throws ClientException */