binsoul/net-http-request
Extended ServerRequest class and request factory
Maintainers
Requires
- php: ^7.0
- binsoul/common: ~1.0@dev
- binsoul/io-stream: ~1.0@dev
- binsoul/net: ~1.0@dev
- binsoul/net-http-message-bridge: ~1.0@dev
- binsoul/net-http-message-message: ~1.0@dev
Requires (Dev)
- fabpot/php-cs-fixer: ^1.0
- phpunit/phpunit: ^5.0
Suggests
- mobiledetect/mobiledetectlib: For better device type detection (including tablets)
Provides
None
Conflicts
None
Replaces
None
MIT 2691f7c264b0877d67609f72fd077b4d47f8efaa
- Sebastian MΓΆΓler <code.woop@binsoul.de>
This package is auto-updated.
Last update: 2026-06-15 01:21:25 UTC
README
π Latest Version on Packagist
π Software License
π Total Downloads
This package provides a Request class which extends the PSR-7 ServerRequest class with header and role objects and simplifies access to attributes, query and post parameters.
The included RequestFactory class can build requests automatically from PHP superglobals or from given data. It uses the factory interfaces defined in binsoul/net-http-message-bridge to build URIs and streams. Headers typically set by load balancers or proxies are used to build requests.
Install
Via composer:
$ composer require binsoul/net-http-request
Usage
Build a request from PHP superglobals:
<?php use BinSoul\Bridge\Http\Message\DefaultStreamFactory; use BinSoul\Bridge\Http\Message\DefaultUriFactory; use BinSoul\Net\Http\Request\RequestFactory; require 'vendor/autoload.php'; $factory = new RequestFactory(new DefaultUriFactory(), new DefaultStreamFactory()); $request = $factory->buildFromEnvironment();
Build a request from provided data:
<?php use BinSoul\Bridge\Http\Message\DefaultStreamFactory; use BinSoul\Bridge\Http\Message\DefaultUriFactory; use BinSoul\Bridge\Http\Message\Stream as HttpStream; use BinSoul\IO\Stream\Type\MemoryStream; use BinSoul\Net\Http\Request\RequestFactory; require 'vendor/autoload.php'; $stream = new HttpStream(new MemoryStream(), 'r+'); $stream->write('Hello world!'); $factory = new RequestFactory(new DefaultUriFactory(), new DefaultStreamFactory()); $request = $factory->buildFromData($stream, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES); echo (string) $request->getBody(); // Hello world!
Use the URI implementation from league/uri:
<?php use BinSoul\Bridge\Http\Message\DefaultStreamFactory; use BinSoul\Bridge\Http\Message\UriFactory; use BinSoul\Net\Http\Request\RequestFactory; use League\Uri\Schemes\Http as HttpUri; require 'vendor/autoload.php'; class LeagueUriFactory implements UriFactory { public function build($uri) { return HttpUri::createFromString($uri); } } $factory = new RequestFactory(new LeagueUriFactory(), new DefaultStreamFactory()); $request = $factory->buildFromEnvironment();
Example
Output a HTML page with information about the current request:
<?php use BinSoul\Bridge\Http\Message\DefaultStreamFactory; use BinSoul\Bridge\Http\Message\DefaultUriFactory; use BinSoul\Net\Http\Request\RequestFactory; require 'vendor/autoload.php'; $factory = new RequestFactory(new DefaultUriFactory(), new DefaultStreamFactory()); $request = $factory->buildFromEnvironment(); // Roles $client = $request->getClient(); $server = $request->getServer(); // Headers $userAgent = $request->getUserAgent(); $cacheControl = $request->getCacheControl(); $acceptMediaType = $request->getAcceptMediaType(); $acceptEncoding = $request->getAcceptEncoding(); $acceptLanguage = $request->getAcceptLanguage(); $acceptCharset = $request->getAcceptCharset(); // make var_export HTML friendly function dump($value) { return htmlentities(preg_replace("/\s+=>\s+/m", ' => ', var_export($value, true))); } ?> <!DOCTYPE html> <html> <head> <style type="text/css"> h1 { font-size: 150%; margin: 1em 0 0.25em 0; border-bottom: 1px solid #888;} td { vertical-align: top; padding: 2px 6px; } td:first-child {white-space: nowrap;} </style> </head> <body> <h1>Request</h1> <table> <tr> <td>protocol:</td> <td>HTTP/<?= $request->getProtocolVersion() ?></td> </tr> <tr> <td>method:</td> <td><?= $request->getMethod() ?></td> </tr> <tr> <td>URI:</td> <td><?= $request->getUri() ?></td> </tr> <tr> <td>query:</td> <td> <pre><?= dump($request->getQueryParams()) ?></pre> </td> </tr> <tr> <td>post:</td> <td> <pre><?= dump($request->getParsedBody()) ?></pre> </td> </tr> <tr> <td>files:</td> <td> <pre><?= dump($request->getUploadedFiles()) ?></pre> </td> </tr> <tr> <td>headers:</td> <td> <pre><?= dump($request->getHeaders()) ?></pre> </td> </tr> <tr> <td>Is SSL?</td> <td><?= $request->isSSL() ? 'yes' : 'no' ?></td> </tr> <tr> <td>Is DNT?</td> <td><?= $request->isDoNotTrack() ? 'yes' : 'no' ?></td> </tr> <tr> <td>Is Javascript?</td> <td><?= $request->isJavascript() ? 'yes' : 'no' ?></td> </tr> </table> <h1>Server</h1> <table> <tr> <td>IP:</td> <td><?= $server->getIP() ?></td> </tr> <tr> <td>port:</td> <td><?= $server->getPort() ?></td> </tr> </table> <h1>Client</h1> <table> <tr> <td>IP:</td> <td><?= $client->getIP() ?></td> </tr> <tr> <td>port:</td> <td><?= $client->getPort() ?></td> </tr> <tr> <td>Is headless?</td> <td><?= $client->isHeadless() ? 'yes' : 'no' ?></td> </tr> </table> <h1>User-Agent</h1> <table> <tr> <td>browser:</td> <td><?= $userAgent->getBrowser() ?></td> </tr> <tr> <td>platform:</td> <td><?= $userAgent->getPlatform() ?></td> </tr> <tr> <td>device:</td> <td><?= $userAgent->getDeviceType() ?></td> </tr> <tr> <td>Is bot?</td> <td><?= $userAgent->isBot() ? 'yes' : 'no' ?></td> </tr> </table> <h1>Cache-Control</h1> <table> <tr> <td>Has max-age?</td> <td><?= $cacheControl->hasMaxAge() ? 'yes' : 'no' ?></td> </tr> <tr> <td>max-age:</td> <td><?= $cacheControl->getMaxAge() ?></td> </tr> <tr> <td>Is refresh?</td> <td><?= $cacheControl->isRefresh() ? 'yes' : 'no' ?></td> </tr> <tr> <td>Is reload?</td> <td><?= $cacheControl->isReload() ? 'yes' : 'no' ?></td> </tr> </table> <h1>Accept</h1> <ol> <?php foreach ($acceptMediaType->getMediaTypes() as $mediaType): ?> <li><?= $mediaType ?></li> <?php endforeach; ?> </ol> <h1>Accept-Encoding</h1> <ol> <?php foreach ($acceptEncoding->getEncodings() as $encoding) : ?> <li><?= $encoding ?></li> <?php endforeach; ?> </ol> <h1>Accept-Language</h1> <ol> <?php foreach ($acceptLanguage->getLanguages() as $language): ?> <li><?= $language ?></li> <?php endforeach; ?> </ol> <h1>Accept-Charset</h1> <ol> <?php foreach ($acceptCharset->getCharsets() as $charset): ?> <li><?= $charset ?></li> <?php endforeach; ?> </ol> </body> </html>
Testing
$ composer test
License
The MIT License (MIT). Please see License File for more information.
