完善 http 客户端

This commit is contained in:
JaguarJack 2020-05-22 14:08:53 +08:00
parent b7d951bdb7
commit ca5e76497c
2 changed files with 86 additions and 37 deletions

View File

@ -3,6 +3,7 @@ namespace catcher\library\client;
use catcher\exceptions\FailedException; use catcher\exceptions\FailedException;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use GuzzleHttp\Promise\Promise;
use GuzzleHttp\TransferStats; use GuzzleHttp\TransferStats;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use function GuzzleHttp\Psr7\stream_for; use function GuzzleHttp\Psr7\stream_for;
@ -49,32 +50,27 @@ class Http
protected $async = false; protected $async = false;
/**
* @var array
*/
protected $timeout = []; protected $timeout = [];
/** /**
* Http constructor. * @var string
* @param string $baseUri
*/ */
public function __construct(string $baseUri = '') protected $token = '';
{
$this->getClient($baseUri);
}
protected $multipart = [];
/** /**
* 获取 Guzzle 客户端 * 获取 Guzzle 客户端
* *
* @param $baseUri
* @time 2020年05月21日 * @time 2020年05月21日
* @return Client * @return Client
*/ */
public function getClient(string $baseUri) public function getClient()
{ {
if (!$this->client) { if (!$this->client) {
$this->client = $baseUri ? new Client([ $this->client = new Client;
'base_uri' => $baseUri
]) : new Client;
} }
return $this->client; return $this->client;
@ -89,9 +85,24 @@ class Http
*/ */
public function headers(array $headers) public function headers(array $headers)
{ {
$this->header = [
'headers' => $headers $this->header = isset($this->header['headers']) ?
]; array_merge($this->header['headers'], $headers) :
[ 'headers' => $headers ];
return $this;
}
/**
* set bearer token
*
* @time 2020年05月22日
* @param string $token
* @return $this
*/
public function token(string $token)
{
$this->header['headers']['authorization'] = 'Bearer '. $token;
return $this; return $this;
} }
@ -151,10 +162,10 @@ class Http
* @param $params * @param $params
* @return $this * @return $this
*/ */
public function formParams($params) public function form(array $params)
{ {
$this->formParams = [ $this->formParams = [
'form_params' => $params 'form_params' => array_merge($this->multipart, $params)
]; ];
return $this; return $this;
@ -183,11 +194,9 @@ class Http
* @param $url * @param $url
* @return Response * @return Response
*/ */
public function get($url) public function get(string $url)
{ {
$response = $this->client->{$this->asyncMethod(__FUNCTION__)}($url, array_merge($this->header, $this->query, $this->timeout)); return new Response($this->getClient()->{$this->asyncMethod(__FUNCTION__)}($url, array_merge($this->header, $this->query, $this->timeout)));
return new Response($response);
} }
/** /**
@ -197,11 +206,11 @@ class Http
* @param $url * @param $url
* @return mixed * @return mixed
*/ */
public function post($url) public function post(string $url)
{ {
return $this->client->{$this->asyncMethod(__FUNCTION__)}($url, array_merge( return new Response($this->getClient()->{$this->asyncMethod(__FUNCTION__)}($url, array_merge(
$this->header, $this->body, $this->formParams, $this->json, $this->timeout $this->header, $this->body, $this->formParams, $this->json, $this->timeout, $this->multipart
) ); )));
} }
/** /**
@ -211,11 +220,11 @@ class Http
* @param $url * @param $url
* @return mixed * @return mixed
*/ */
public function put($url) public function put(string $url)
{ {
return $this->client->{$this->asyncMethod(__FUNCTION__)}($url, array_merge( return new Response($this->getClient()->{$this->asyncMethod(__FUNCTION__)}($url, array_merge(
$this->header, $this->body, $this->formParams, $this->json, $this->timeout $this->header, $this->body, $this->formParams, $this->json, $this->timeout
)); )));
} }
/** /**
@ -225,11 +234,11 @@ class Http
* @param $url * @param $url
* @return mixed * @return mixed
*/ */
public function delete($url) public function delete(string $url)
{ {
return $this->client{$this->asyncMethod(__FUNCTION__)}($url, array_merge( return new Response($this->getClient()->{$this->asyncMethod(__FUNCTION__)}($url, array_merge(
$this->header, $this->query, $this->timeout $this->header, $this->query, $this->timeout
)); )));
} }
/** /**
@ -245,6 +254,30 @@ class Http
return $this; return $this;
} }
/**
* 附件
*
* @time 2020年05月22日
* @param $name
* @param $resource
* @param $filename
* @return $this
*/
public function attach(string $name, $resource, string $filename)
{
$this->multipart = [
'multipart' => [
[
'name' => $name,
'contents' => $resource,
'filename' => $filename,
]
]
];
return $this;
}
/** /**
* 异步方法 * 异步方法
* *

View File

@ -2,6 +2,8 @@
namespace catcher\library\client; namespace catcher\library\client;
use GuzzleHttp\Promise\Promise;
/** /**
* http response * http response
* *
@ -12,21 +14,22 @@ namespace catcher\library\client;
class Response implements \ArrayAccess class Response implements \ArrayAccess
{ {
/** /**
* @var \GuzzleHttp\Psr7\Response * @var \GuzzleHttp\Psr7\Response|Promise
*/ */
protected $response; protected $response;
public function __construct(\GuzzleHttp\Psr7\Response $response) public function __construct($response)
{ {
$this->response = $response; $this->response = $response;
} }
/** /**
* *
* @time 2020年05月21 * @time 2020年05月22
* @return string * @return bool|callable|float|\GuzzleHttp\Psr7\PumpStream|\GuzzleHttp\Psr7\Stream|int|\Iterator|\Psr\Http\Message\StreamInterface|resource|string|null
*/ */
public function body():string public function body()
{ {
return $this->response->getBody(); return $this->response->getBody();
} }
@ -91,6 +94,19 @@ class Response implements \ArrayAccess
return $this->response->getHeaders(); return $this->response->getHeaders();
} }
/**
* 异步回调
*
* @time 2020年05月22日
* @param callable $response
* @param callable $exception
* @return \GuzzleHttp\Promise\FulfilledPromise|Promise|\GuzzleHttp\Promise\PromiseInterface|\GuzzleHttp\Promise\RejectedPromise
*/
public function then(callable $response, callable $exception)
{
return $this->response->then($response, $exception);
}
/** /**
* *
* @time 2020年05月21日 * @time 2020年05月21日