kemist/http

符合PSR-7规范的HTTP库

v1.0.1 2015-03-24 09:04 UTC

This package is auto-updated.

Last update: 2024-09-05 20:05:30 UTC


README

Build Status Scrutinizer Code Quality Coverage Status Latest Stable Version License

遵守提议的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&param2=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());