innmind/http

Value Objects to abstract http messages

7.1.0 2024-06-27 09:27 UTC

README

Build Status codecov Type Coverage

Immutable value objects and interfaces to abstract http messages.

Important: you must use vimeo/psalm to make sure you use this library correctly.

Build a ServerRequest

use Innmind\Http\Factory\ServerRequest\ServerRequestFactory;

$request = ServerRequestFactory::default()();

Send a Response

use Innmind\Http\{
    Response,
    Response\StatusCode,
    ProtocolVersion,
    Headers,
    Header,
    Header\ContentType,
    Header\ContentTypeValue,
    ResponseSender,
};
use Innmind\Filesystem\File\Content;
use Innmind\TimeContinuum\Earth\Clock;

$response = Response::of(
    StatusCode::ok,
    ProtocolVersion::v11,
    Headers::of(
        ContentType::of('application', 'json'),
    ),
    Content\Lines::ofContent('{"some": "data"}'),
);

(new ResponseSender(new Clock))($response);

will build the following message:

HTTP/1.1 200 OK
Date: Wed, 04 May 2016 14:24:14 +0000
Content-Type : application/json

{"some": "data"}

Build a multipart Request

use Innmind\Http\{
    Request,
    Method,
    Content\Multipart,
    Header\ContentType,
    Header\ContentType\Boundary,
    Headers,
    ProtocolVersion,
};
use Innmind\Filesystem\{
    File\File,
    File\Content,
};
use Innmind\Url\Url;

$boundary = Boundary::uuid();
$request = Request::of(
    Url::of('http://some-server.com/')
    Method::post,
    ProtocolVersion::v11,
    Headers::of(ContentType::of('multipart', 'form-data', $boundary)),
    Multipart::boundary($boundary)
        ->with('some[key]', 'some value')
        ->withFile('some[file]', File::named(
            'whatever.txt',
            Content::ofString(' can be any file content'),
        )),
);