kemist / http
符合PSR-7规范的HTTP库
v1.0.1
2015-03-24 09:04 UTC
Requires
- php: >=5.3.0
- psr/http-message: ^0.9
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-09-05 20:05:30 UTC
README
遵守提议的PSR-7消息实现的HTTP库,基本灵感来自PSR-7,基本上受到phly/http的启发
安装
通过composer
{ "require": { "kemist/http": "1.0.*" } }
HTTP客户端
此包包含一个基于cURL和socket的HTTP客户端类。基本的GET示例
<?php $request=new Kemist\Http\Request('http://httpbin.org/get?sd=43','GET',array('accept'=>'text/html','connection'=>'close')); // cURL client $client=new Kemist\Http\Client\CurlClient(); // OR Socket-based client $client=new Kemist\Http\Client\SocketClient(); $response=$client->send($request); var_dump($response->getHeaders()); var_dump($response->getBody()->getContents());
基本的POST示例
<?php $request=(new Kemist\Http\Request()) ->withUri(new Kemist\Http\Uri('http://httpbin.org/post')) ->withMethod('POST') ->withHeader('accept','text/html') ->withHeader('connection','close') ->withBody(new Kemist\Http\Stream\StringStream('param1=value1¶m2=value2')) ; // cURL client $client=new Kemist\Http\Client\CurlClient(); // OR Socket-based client $client=new Kemist\Http\Client\SocketClient(); $response=$client->send($request); var_dump($response->getHeaders()); var_dump(json_decode($response->getBody()));
这两种客户端类型都有以下选项
<?php // Client options and their default values $options=array( 'follow_redirections' => true, 'max_redirections' => 10, 'use_cookies' => true, 'dechunk_content' => true, 'decode_content' => true, 'connection_timeout' => 30, 'timeout' => 60, ); // Options are set through the client constructor $client=new Kemist\Http\Client\SocketClient($options);
HTTP服务器
当使用HTTP服务器组件时,您可以通过中间件对象或闭包来处理服务器收到的请求。
<?php $server = new Kemist\Http\Server\Server(); // Appends a closure middleware $server->appendMiddleware(function($request, $response, $server) { $response->getBody()->write('world!'); return $response; }); // Prepends a closure middleware $server->prependMiddleware(function($request, $response, $server) { $response->getBody()->write('Hello '); return $response; }); $response=$server->handle(); echo $response;
您可以通过停止传播到下一个中间件来中断中间件链
<?php $server->appendMiddleware(function($request, $response, $server) { $response->getBody()->write('This string never appears!'); return $response; }); $server->prependMiddleware(function($request, $response, $server) { $response->getBody()->write('Hello world!'); $server->stopPropagation(); return $response; });
您还可以使用扩展AbstractMiddleware类的中间件。此包附带一个示例中间件:IsNotModifiedMiddleware。它通过比较一些特殊的请求和响应头(ETag和Last-Modified)来决定内容是否未修改,然后设置适当的响应状态码并停止传播。
<?php $server->appendMiddleware(new Kemist\Http\Server\IsNotModifiedMiddleware());