edgetelemetrics / fetch
Async PHP implementation of the Javascript FetchAPI
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/edgetelemetrics/fetch
Requires
Requires (Dev)
- phpunit/phpunit: ^9.5
- react/async: ^4 || ^3 || ^2
- react/dns: *
- react/promise-stream: ^1.4
- react/promise-timer: ^1.9
README
Implementation of the Javascript fetch() API
Features
Supports HTTP/2+3, connection pooling (with keep-alive), and the extraction of timing data for the requests.
Requirements
The package is compatible with PHP 8.2+ and requires the cURL extension and edgetelemetrics/reactphp-http-browser-curl library.
Installation
You can add the library as a project dependency using Composer:
composer require edgetelemetrics/fetch
Examples
See /examples directory. Examples based on examples from reactphp/http under MIT License
Timing
Request timing values are returned in the PSR7 Response object headers under the key Server-Timing
Configuration
The Browser can be configured with standard CURLOPT_* parameters given via the constructor.
fetch( $uri, [ 'curlOpts' => [ CURLOPT_TIMEOUT => 20, CURLOPT_DOH_URL, 'https://1.1.1.1/dns-query', CURLOPT_DNS_SERVERS => '1.1.1.1', ], ]);
Connection Metadata
Connection Timing
The request/response timing is provided though the header 'ServerTiming' in the Response object.
Each timing point is defined as <timing point>;dur=<duration in second>
- namelookup_time
- connect_time
- appconnect_time
- pretransfer_time
- redirect_time
- starttransfer_time
- total_time
Connection Details
Additional request/response metadata is provided though the header 'X-Connection' in the Response object.
Key/Value pairs are as follows:
- effective_url=
<final url after any redirects> - connection;count=
<number of connections opened during the request, 0 if existing connection reused> - redirect;count=
<number of redirects followed> - upload;size=
<bytes sent in request(headers+body) including redirects>;speed=<overall bytes per second upload> - download;size=
<bytes received in response(headers+body) including redirects>;speed=<overall bytes per second download>
Synchronous Use
This library can be used in synchronous mode using react\async.
See Synchronous Client Example
License
MIT, see LICENSE file.
Contributing
Bug reports (and small patches) can be submitted via the issue tracker. Forking the repository and submitting a Pull Request is preferred for substantial patches.