guzzlehttp/message-integrity-subscriber

此包已被废弃,不再维护。未建议替代包。

使用自定义验证器验证HTTP响应的完整性(Guzzle 4+)

0.2.0 2014-10-12 20:51 UTC

This package is not auto-updated.

Last update: 2020-02-07 15:16:32 UTC


README

使用自定义验证器验证HTTP响应的完整性。

此插件可以用来验证基于Content-MD5头部的响应消息完整性。插件提供了一种方便的方法来验证Content-MD5头部。

use GuzzleHttp\Client();
use GuzzleHttp\Subscriber\MessageIntegrity\ResponseIntegrity;

$subscriber = ResponseIntegrity::createForContentMd5();
$client = new Client();
$client->getEmitter()->attach($subscriber);

安装

可以使用Composer安装此项目。将以下内容添加到您的composer.json中

{
    "require": {
        "guzzlehttp/message-integrity-subscriber": "0.2.*"
    }
}

构造函数选项

GuzzleHttp\Subscriber\MessageIntegrity\ResponseIntegrity类接受一个关联数组作为选项

expected
(函数) 一个返回预期响应哈希的函数。该函数接受一个ResponseInterface对象,并返回一个字符串,该字符串与计算出的滚动哈希进行比较。
hash
(GuzzleHttp\Subscriber\MessageIntegrity\HashInterface) 用于计算响应体哈希的哈希对象。哈希的结果与提取的头部值进行比较。
size_cutoff
(整数) 如果指定,只有当响应大小小于size_cutoff值(以字节为单位)时,才会验证消息完整性。
use GuzzleHttp\Client();
use GuzzleHttp\Message\ResponseInterface;
use GuzzleHttp\Subscriber\MessageIntegrity\ResponseIntegrity;

$subscriber = new ResponseIntegrity([
    'hash' => new PhpHash('md5', ['base64' => true])
    'expected' => function (ResponseInterface $response) {
        return $response->getHeader('Content-MD5');
    }
]);

$client = new Client();
$client->getEmitter()->attach($subscriber);

错误处理

如果响应体的计算哈希与提取的响应头部不匹配,则抛出GuzzleHttp\Subscriber\MessageIntegrity\MessageIntegrityException异常。此异常扩展自GuzzleHttp\Exception\RequestException,因此它包含通过getRequest()访问的请求和通过getResponse()访问的响应。

use GuzzleHttp\Client();
use GuzzleHttp\Subscriber\MessageIntegrity\ResponseIntegrity;
use GuzzleHttp\Subscriber\MessageIntegrity\MessageIntegrityException;

$subscriber = ResponseIntegrity::createForContentMd5();
$client = new Client();
$client->getEmitter()->attach($subscriber);

try {
    $client->get('http://httpbin.org/get');
} catch (MessageIntegrityException $e) {
    echo $e->getRequest() . "\n";
    echo $e->getResponse() . "\n";
}

限制

  • 仅适用于可寻址响应或流式响应。
  • 目前不适用于使用Transfer-Encoding头部的响应。
  • 目前不适用于使用Content-Encoding头部的响应。