Implementation of PSR-7 standard for representing HTTP messages as described in RFC 7230 and RFC 7231, and URIs for use with HTTP messages as described in RFC 3986.

Maintainers

Package info

github.com/thingston/psr7

Language:HTML

pkg:composer/thingston/psr7

Statistics

Installs: 2

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-05-12 09:47 UTC

This package is auto-updated.

Last update: 2026-05-12 10:56:44 UTC


README

Implementation of PSR-7 standard for representing HTTP messages as described in RFC 7230 and RFC 7231, and URIs for use with HTTP messages as described in RFC 3986.

Requirements

  • PHP >=8.5
  • Composer

Installation

Install the package with Composer:

composer require thingston/psr7

Usage

Create a request

<?php

use Thingston\Psr7\Request;

$request = new Request(
    method: 'POST',
    uri: 'https://api.example.com/users?active=1',
    headers: [
        'Content-Type' => 'application/json',
        'Accept' => 'application/json',
    ],
);

$request = $request->withBody(new \Thingston\Psr7\Stream('{"name":"Ada"}'));

echo $request->getMethod();          // POST
echo $request->getRequestTarget();   // /users?active=1
echo $request->getHeaderLine('Host'); // api.example.com

Create a response

<?php

use Thingston\Psr7\Response;
use Thingston\Psr7\Stream;

$response = new Response(
    statusCode: 201,
    headers: ['Content-Type' => 'application/json'],
    body: new Stream('{"created":true}')
);

echo $response->getStatusCode();   // 201
echo $response->getReasonPhrase(); // Created

Work with URIs

<?php

use Thingston\Psr7\Uri;

$uri = (new Uri('https://example.com/base/path'))
    ->withQuery('page=2')
    ->withFragment('details');

echo (string) $uri; // https://example.com/base/path?page=2#details

Build a server request from PHP globals

<?php

use Thingston\Psr7\ServerRequest;

$request = ServerRequest::fromGlobals();

echo $request->getMethod();
echo (string) $request->getUri();
print_r($request->getQueryParams());
print_r($request->getUploadedFiles());

Uploaded files

<?php

use Thingston\Psr7\UploadedFile;

$file = new UploadedFile('/tmp/report.csv', 1234, UPLOAD_ERR_OK, 'report.csv', 'text/csv');
$file->moveTo(__DIR__ . '/storage/report.csv');

Notes

PSR-7 objects in this package are immutable. Methods such as withHeader(), withStatus(), withUri(), and withParsedBody() return a new instance instead of modifying the original object.