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 URI
Only 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 Found
Both 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 file
The 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());