crysalead / net
Net - Network Message implementation
Installs: 17 141
Dependents: 4
Suggesters: 0
Security: 0
Stars: 0
Watchers: 4
Forks: 0
Open Issues: 0
Requires
- php: >=7
- ext-iconv: *
- ext-intl: *
- crysalead/collection: ~3.0
- crysalead/env: ~1.0
- crysalead/set: ~2.0
- crysalead/storage-stream: dev-master
- crysalead/text: ~2.0
- psr/http-message: ~1.0
Requires (Dev)
- crysalead/dir: ^2.0
- kahlan/kahlan: ~5.0
This package is auto-updated.
Last update: 2024-11-17 23:21:56 UTC
README
This library is a Network Message implementation in PHP. The library provides some PSR-7 compatible accessors and can be used with any PSR-7 compatible transport layer library.
Installation
composer require crysalead/net
API
The HTTP Request class
use Lead\Net\Http\Request; $request = new Request([ 'method' => 'POST', 'scheme' => 'http', 'version' => '1.1', 'host' => 'www.domain.com', 'port' => 8080, 'username' => 'username', 'password' => 'password', 'path' => '/index.php', 'query' => ['foo' => 'bar'], 'fragment' => '#quz', 'type' => 'application/json', 'data' => '['foo' => 'bar']' ]); // Getters $request->method(); // POST $request->scheme(); // http $request->version(); // 1.1 $request->protocol(); // HTTP/1.1 $request->host(); // www.domain.com:8080 $request->hostname(); // www.domain.com $request->port(); // 80 $request->username(); // username $request->password(); // password $request->query(); // ['foo' => 'bar'] $request->fragment(); // '#quz' $request->url(); // http://www.domain.com:8080/index.php $request->type(); // application/json $request->encoding(); // <none> $request->get(); // ['foo' => 'bar'] $request->body(); // '{"foo":"bar"}' $request->stream(); // the plain body stream instance $request->mode(); // origin $request->line(); // POST /index.php HTTP/1.1 $request->data(); // exports the request as an array $request->toString(); // exports the request as an string (string) $request; // exports the request as an string // Setters $request->method('PATCH'); $request->scheme('https'); $request->version('1.0'); $request->host('www.domain.com:8000'); $request->port('80'); $request->query(['foo' => 'baz']); $request->fragment(#qaz); $request->type('application/json'); $request->set(['foo' => 'baz']); $request->body('{"foo":"baz"}'); $request->mode('absolute'); $request->username('username'); $request->password('password'); $request->auth(); // Generates a Basic auth header from credentials. // Generates a Digest auth header from credentials $request->auth([ 'realm' => 'app', 'qop' => 'auth', 'nonce' => '4bca0fbca7bd0', 'opaque' => 'd3fb67a7aa4d887ec4bf83040a820a46' ]); $request->auth(false); // Removes Authorization header from headers
Example of creating a request from an absolute URL:
use Lead\Net\Http\Request; $request = Request::create('http://username:password@www.domain.com:8080/index.php', [ /* additionnal options */ ]);
The HTTP Response class
use Lead\Net\Http\Response; $response = new Response([ 'status' => [200, 'OK'], 'version' => '1.1', 'type' => 'text/html; charset=utf-8', 'body' => '<html></html>' ]); // Getters $response->status(); // [200, 'OK'] $response->version(); // 1.1 $response->protocol(); // HTTP/1.1 $response->type(); // text/html $response->encoding(); // utf-8 $response->digest(); // Looks at the WWW-Authenticate headers and returns an array of key/values. $response->get(); // '<html></html>' $response->body(); // '<html></html>' $response->stream(); // a Stream instance of the plain body $response->line(); // HTTP/1.1 200 OK $response->data(); // exports the response as an array $response->toString(); // exports the response as an string (string) $response; // exports the response as an string // Setters $response->status(404); $response->status([404, 'Not Found']); $response->version('1.0'); $response->type('text/plain'); $response->set('Not Found'); $response->body('Not Found'); $response->cache(false); // Disable cache $response->cache('+2 weeks'); // 2 weeks cache //
Example of creating a response from a plain string body:
use Lead\Net\Http\Response; $response = Response::parse(join("\r\n", [ 'HTTP/1.1 200 OK', 'Connection: close', 'Content-Type: text/plain;charset=UTF8', 'Content-Length: 5', 'Set-Cookie: doctor=who; Path=/tardis; HttpOnly', 'Set-Cookie: test=foo%20bar; Expires=Fri, 25 Dec 2015 00:00:00 GMT; Secure', 'Set-Cookie: test=foo%2Bbin; Path=/test; Domain=.domain.com', '', 'Test!' ]));
The HTTP Headers class
You can access HTTP Headers from both requests and responses instance through the headers
public member.
$request = new Request(); $request->headers['Content-Type']; $request->headers['Vary'] = 'Accept-Encoding'; $request->headers['Vary'][] = 'Cookie'; $request->headers['Vary'][] = 'User-Agent'; $request->headers['Cookie'] = 'foo1=bar1; foo2=bar2; foo3=bar3'; // You can also access cookies through the `cookies` public member from headers. $request->headers->cookies['foo4'] = 'bar4'; $request->headers->cookies['foo4'][] = 'bar44'; (string) $request->headers->cookies; // Cookie header representation (string) $request->headers; // Headers representation
Headers work the same way for responses:
$response = new Responses(); $response->headers['Cache-Control'] = 'no-store'; $response->headers['Cache-Control'][] = 'no-cache'; $response->headers['Cache-Control'][] = 'must-revalidatee'; $response->headers['Cache-Control'][] = 'max-age'; // You can also use `$response->cache('+2 weeks')` or `$response->cache(false)` to control caches; // You can set several Set-Cookie with the same name as long as the path and or domain differ. $request->headers->cookies['foo'] = ['value' => 'quz', 'path' => '/foo']; $request->headers->cookies['foo'] = ['value' => 'qaz', 'path' => '/foo/bar'];
Note: cookies in responses are in Set-Cookie
headers.
The CGI Request class
use Lead\Net\Http\Cgi\Request; // Creates a server request build with CGI global vars (ie. $_SERVER, $_POST, $_GET, $_COOKIE, $_FILES) $request = Request::ingoing();