MaplePHP/Http is a PHP library that brings simplicity and adherence to the PSR-7 standard into handling HTTP messages, requests, and responses within your web projects. It's thoughtfully designed to make the integration of crucial elements like Stream, Client, Cookies, UploadedFile, and Headers straightforward and efficient.
By aligning closely with PSR-7, MaplePHP/Http facilitates better interoperability between web components, allowing for more effective communication within applications. Whether you're working with client-side cookies, managing headers in a request, or handling file uploads through UploadedFile, this library has got you covered, making these tasks more manageable and less time-consuming.
MaplePHP/Http aims to support your web development by offering a reliable foundation for working with HTTP messaging, streamlining the process of dealing with requests and responses. It's a practical choice for developers looking to enhance their applications with PSR-7 compliant HTTP handling in a user-friendly way.
composer require maplephp/http The examples below is utilizing the "namespace" below just to more easily demonstrate the guide.
use MaplePHP\Http;$request = new Http\ServerRequest(UriInterface $uri, EnvironmentInterface $env);echo $request->getMethod(); // GET, POST, PUT, DELETE$uri = $request->getUri(); // UriInterface echo $uri->getScheme(); // https echo $uri->getAuthority(); // [userInfo@]host[:port] echo $uri->getUserInfo(); // username:password echo $uri->getHost(); // example.com, staging.example.com, 127.0.0.1, localhost echo $uri->getPort(); // 443 echo $uri->getPath(); // /about-us/workers echo $uri->getQuery(); // page-id=12&filter=2 echo $uri->getFragment(); // anchor-12 (The anchor hash without "#") echo $uri->getUri(); // Get the full URIOnly the (StreamInterface) Body attribute is required and the rest will auto propagate if you leave them be.
$response = new Http\Response( StreamInterface $body, ?HeadersInterface $headers = null, int $status = 200, ?string $phrase = null, ?string $version = null );echo $response->getStatusCode(); // 200$newInst = $response->withStatus(404); echo $newInst->getStatusCode(); // 404 echo $newInst->getReasonPhrase(); // Not FoundBoth Request and Response library will inherit methods under Message but with different information.
echo $response->getProtocolVersion(); // 1.1 echo $response->getHeaders(); // Array with all headers echo $response->hasHeader("Content-Length"); // True echo $response->getHeader("Content-Length"); // 1299 echo $response->getBody(); // StreamInterface$stream = new Http\Stream(Http\Stream::TEMP); $response = new Http\Response($stream); $env = new Http\Environment(); $request = new Http\ServerRequest(new Http\Uri($env->getUriParts()), $env);None of the construct attributes are required and will auto propagate if you leave them be.
$stream = new Http\Stream( (mixed) Stream (string) permission );$stream = new Http\Stream(Http\Stream::TEMP); if ($stream->isSeekable()) { $stream->write("Hello world"); //echo $stream; // will print Hello world // Or $stream->rewind(); echo $stream->getContents(); // Hello world // Or Same as above //echo $stream->read($stream->getSize()); }$stream = new Http\Stream("/var/www/html/YourApp/dir/dir/data.json"); echo $stream->getContents();$upload = new Http\UploadedFile($stream); $upload->moveTo("/var/www/html/upload/log.txt"); // Place Hello world in txt fileThe client will be using curl, so it's essential to ensure that it is enabled in case it has been disabled for any reason.
// Init request client $client = new Http\Client([CURLOPT_HTTPAUTH => CURLAUTH_DIGEST]); // Pass on Curl options // Create request data $request = new Http\Request( "POST", // The HTTP Method (GET, POST, PUT, DELETE, PATCH) "https://admin:mypass@example.com:443/test.php", // The Request URI ["customHeader" => "lorem"], // Add Headers, empty array is allowed ["email" => "john.doe@example.com"] // Post data ); // Pass request data to client and POST $response = $client->sendRequest($request); // Get Stream data var_dump($response->getBody()->getContents());