guzzlehttp / message-integrity-subscriber
此包已被废弃,不再维护。未建议替代包。
使用自定义验证器验证HTTP响应的完整性(Guzzle 4+)
0.2.0
2014-10-12 20:51 UTC
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: ~4.0|~5.0
Requires (Dev)
- phpunit/phpunit: ~4.0
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
头部的响应。