johnshopkins/http-exchange

PHP HTTP 客户端适配器集合,使更换 HTTP 客户端依赖变得快捷简单。

v1.0 2023-09-21 13:53 UTC

README

PHP HTTP 客户端适配器集合,使更换 HTTP 客户端依赖变得快捷简单。

可用适配器

要求

  • PHP >= 8.0
  • Guzzle >= 6.5

安装

要安装此库,您需要在项目中使用 Composer。

composer require johnshopkins/http-exchange

基本用法

单次请求

$client = new GuzzleHttp\Client();
$http = new HttpExchange\Adapters\Guzzle7($client);

$response = $http->get('http://httpbin.org/get');
$body = $response->getBody();
echo $body->url;

// prints: http://httpbin.org/get

批量请求

$client = new GuzzleHttp\Client();
$http = new HttpExchange\Adapters\Guzzle7($client);

$responses = $http->batch([
  ['get', 'http://httpbin.org/get'],
  ['post', 'http://httpbin.org/post']
]);

foreach ($responses as $response) {
  $body = $response->getBody();
  echo $body->url . "\n";
}

// prints:
// http://httpbin.org/get
// http://httpbin.org/post

错误处理

单次请求

如果请求失败,将抛出 HttpExchange\Exceptions\HTTP 异常。有关更多信息,请参阅异常方法文档

$client = new GuzzleHttp\Client();
$http = new HttpExchange\Adapters\Guzzle7($client);

try {
  $response = $http->get('http://httpbin.org/status/503');
  $body = $response->getBody();
} catch (\Exception $e) {
  echo $->getCode() . ': ' . $e->getMessage();
}

// prints:  503: Server error: `GET http://httpbin.org/status/503` resulted in a `503 SERVICE UNAVAILABLE` response

批量请求

在批量请求中,如果任一请求失败,而不是抛出 HttpExchange\Exceptions\HTTP,异常将被返回。这允许您的应用程序优雅地处理失败的请求,同时处理成功的请求。

$client = new GuzzleHttp\Client();
$http = new HttpExchange\Adapters\Guzzle7($client);

$responses = $http->batch([
  ['get', 'http://httpbin.org/get'],
  ['get', 'http://httpbin.org/status/503']
]);

foreach ($responses as $response) {
  if ($response->getStatusCode() === 200) {
    $body = $response->getBody();
    echo $body->url . "\n";
  } else {
    echo $body->url . "This request failed :(\n";
  }
}

// prints:
// http://httpbin.org/get
// This request failed :(

或者,您可以检查每个请求返回的对象类型(HttpExchange\ResponseHttpExchange\Exceptions\HTTP),并根据需要进行处理。

$client = new GuzzleHttp\Client();
$http = new HttpExchange\Adapters\Guzzle7($client);

$responses = $http->batch([
  ['get', 'http://httpbin.org/get'],
  ['get', 'http://httpbin.org/status/503']
]);

foreach ($responses as $response) {
  if ($response instanceof HttpExchange\Response) {
    $body = $response->getBody();
    echo $body->url . "\n";
  } else {
    echo $body->url . "This request failed :(\n";
  }
}

// prints:
// http://httpbin.org/get
// This request failed :(

文档

初始化

Guzzle 6

$client = new GuzzleHttp\Client();
$http = new HttpExchange\Adapters\Guzzle6($client);

Guzzle 7

$client = new GuzzleHttp\Client();
$http = new HttpExchange\Adapters\Guzzle7($client);

适配器方法

batch(array $requests)

并发发送多个请求。

返回:包含每个请求结果的数组。一个 HttpExchange\Response 对象表示成功的请求,而一个 HttpExchange\Exceptions\HTTP 异常对象表示失败的请求。

参数

  • $requests:要并发执行的请求数组。格式:
    $requests = [[$method, $url, $request_options], ...];
    • $method:HTTP 方法
    • $uri:请求 URI
    • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

get(array $requests)

执行 GET 请求。

返回:一个 HttpExchange\Response 对象。如果请求失败,则抛出 HttpExchange\Exceptions\HTTP 异常对象。

参数

  • $method:HTTP 方法
  • $uri:请求 URI
  • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

post(array $requests)

执行 POST 请求。

返回:一个 HttpExchange\Response 对象。如果请求失败,则抛出 HttpExchange\Exceptions\HTTP 异常对象。

参数

  • $method:HTTP 方法
  • $uri:请求 URI
  • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

put(array $requests)

执行 PUT 请求。

返回:一个 HttpExchange\Response 对象。如果请求失败,则抛出 HttpExchange\Exceptions\HTTP 异常对象。

参数

  • $method:HTTP 方法
  • $uri:请求 URI
  • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

delete(array $requests)

执行 DELETE 请求。

返回:一个 HttpExchange\Response 对象。如果请求失败,则抛出 HttpExchange\Exceptions\HTTP 异常对象。

参数

  • $method:HTTP 方法
  • $uri:请求 URI
  • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

patch(array $requests)

执行 PATCH 请求。

返回:一个 HttpExchange\Response 对象。如果请求失败,则抛出 HttpExchange\Exceptions\HTTP 异常对象。

参数

  • $method:HTTP 方法
  • $uri:请求 URI
  • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

head(array $requests)

执行 HEAD 请求。

返回:一个 HttpExchange\Response 对象。如果请求失败,则抛出 HttpExchange\Exceptions\HTTP 异常对象。

参数

  • $method:HTTP 方法
  • $uri:请求 URI
  • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

options(array $requests)

执行 OPTIONS 请求。

返回:一个 HttpExchange\Response 对象。如果请求失败,则抛出 HttpExchange\Exceptions\HTTP 异常对象。

参数

  • $method:HTTP 方法
  • $uri:请求 URI
  • $request_options:要传递给 HTTP 客户端的请求选项(Guzzle 6Guzzle 7

响应方法

getBody()

获取响应体。

返回:如果响应是 XML,则为 SimpleXMLElement 对象;如果响应是 JSON,则为对象或数组。

getStatusCode()

获取响应的 HTTP 状态码。

返回:整数

异常方法

PHP 异常的所有默认方法都可用,加上

getStatusCode()

获取响应的 HTTP 状态码。

返回:整数