fperdomo/http

HTTP 组件

v1.0.1 2023-12-13 18:22 UTC

This package is auto-updated.

Last update: 2024-09-13 20:00:57 UTC


README

Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version Total Downloads License

免责声明

我上传了自己的版本,因为我向 http 发起了支持 PHP 8.2 的拉取请求,但从未得到回复,该包自 2016 年以来没有更新。

安装

您可以使用 composer 安装此组件。包名是

composer require fperdomo/http

基本用法

请求

Request 类提供了一种面向对象的包装方式,围绕 PHP 超全局变量。这使得它可以作为依赖项注入到需要它的任何类中。

use Http\HttpRequest;

$request = new HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER, file_get_contents('php://input'));

现在您可以在 $request 对象上使用以下方法

$request->getParameter($key, $defaultValue = null);
$request->getFile($key, $defaultValue = null);
$request->getCookie($key, $defaultValue = null);
$request->getParameters();
$request->getQueryParameters();
$request->getBodyParameters();
$request->getRawBody();
$request->getCookies();
$request->getFiles();
$request->getMethod();
$request->getHttpAccept();
$request->getReferer();
$request->getUserAgent();
$request->getIpAddress();
$request->isSecure();
$request->getQueryString();

请注意,GET 和 POST 参数合并在一起,可以通过 getParameter 访问。

响应

HttpResponse 对象是 HTTP 响应的数据载体。它没有构造函数依赖项,可以仅用以下方式实例化

use Http\HttpResponse;

$response =  new HttpResponse;

可以使用以下方法修改响应

$response->setStatusCode($statusCode, $statusText = null);
$response->addHeader($name, $value);
$response->setHeader($name, $value);
$response->addCookie(Cookie $cookie);
$response->deleteCookie(Cookie $cookie);
$response->setContent($content);
$response->redirect($url);

如果您在 setStatusCode 中不提供状态文本,则如果可用,将选择适当的默认状态文本用于 HTTP 状态码。

addHeader 在不覆盖现有值的情况下添加新的头值,setHeader 将覆盖现有值。

redirect 方法将设置 301 重定向的状态码和文本。

deleteCookie 将将 cookie 内容设置为空,并将过期时间设置为过去。

以下两种方法可用于将响应发送到客户端

$response->getHeaders();
$response->getContent();

它们可以这样使用

foreach ($response->getHeaders() as $header) {
    header($header, false);
}

echo $response->getContent();

header 的第二个参数必须是 false。否则,将覆盖现有头。

Cookie

为了避免在您的类中使用 new 调用,并能够为您的应用程序设置默认的 cookie 设置,您可以使用 CookieBuilder 类来创建 cookie 对象。它有以下可用方法

$cookieBuilder->setDefaultDomain($domain); // defaults to NULL
$cookieBuilder->setDefaultPath($path); // defaults to '/'
$cookieBuilder->setDefaultSecure($secure); // defaults to TRUE
$cookieBuilder->setDefaultHttpOnly($httpOnly); // defaults to TRUE
$cookieBuilder->build($name, $value); // returns the cookie object

您可以使用以下方法来操作现有的 cookie

$cookie->setValue($value);
$cookie->setMaxAge($seconds);
$cookie->setDomain($domain);
$cookie->setPath($path);
$cookie->setSecure($secure);
$cookie->setHttpOnly($httpOnly);

cookie 对象可以使用 HttpResponse 方法 addCookiedeleteCookie

示例

<?php

use Http\HttpRequest;
use Http\HttpResponse;
use Http\CookieBuilder;

$loader = require_once __DIR__ . '/vendor/autoload.php';

$cookieBuilder = new CookieBuilder;

// Disable the secure flag because this is only an example
$cookieBuilder->setDefaultSecure(false);

$request = new HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER, file_get_contents('php://input'));
$response = new HttpResponse;

$content = '<h1>Hello World</h1>';
$content .= $request->getCookie('TestCookie', 'Cookie is not set.');

if ($request->getParameter('setCookie') === 'true') {
    $cookie = $cookieBuilder->build('TestCookie', 'Cookie is set.');
    $response->addCookie($cookie);
}

$response->setContent($content);

foreach ($response->getHeaders() as $header) {
    header($header);
}

echo $response->getContent();