Download the PHP package jerome/fetch-php without Composer
On this page you can find all versions of the php package jerome/fetch-php. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download jerome/fetch-php
More information about jerome/fetch-php
Files in jerome/fetch-php
Package fetch-php
Short Description The JavaScript fetch API for PHP.
License MIT
Homepage https://fetch-php.thavarshan.com
Informations about the package fetch-php
Fetch PHP
Fetch PHP is a modern HTTP client library for PHP that brings JavaScript's fetch API experience to PHP. Built on top of Guzzle, Fetch PHP allows you to write HTTP code with a clean, intuitive JavaScript-like syntax while still maintaining PHP's familiar patterns.
With support for both synchronous and asynchronous requests, a fluent chainable API, and powerful retry mechanics, Fetch PHP streamlines HTTP operations in your PHP applications.
Full documentation can be found here
Key Features
- JavaScript-like Syntax: Write HTTP requests just like you would in JavaScript with the
fetch()function andasync/awaitpatterns - Promise-based API: Use familiar
.then(),.catch(), and.finally()methods for async operations - Fluent Interface: Build requests with a clean, chainable API
- Built on Guzzle: Benefit from Guzzle's robust functionality with a more elegant API
- Retry Mechanics: Configurable retry logic with exponential backoff for transient failures
- RFC 7234 HTTP Caching: Full caching support with ETag/Last-Modified revalidation, stale-while-revalidate, and stale-if-error
- Connection Pooling: Reuse TCP connections across requests with global connection pool and DNS caching
- HTTP/2 Support: Native HTTP/2 protocol support for improved performance
- Debug & Profiling: Built-in debugging and performance profiling capabilities
- Type-Safe Enums: Modern PHP 8.3+ enums for HTTP methods, content types, and status codes
- Testing Utilities: Built-in mock responses and request recording for testing
- PHP-style Helper Functions: Includes traditional PHP function helpers (
get(),post(), etc.) for those who prefer that style - PSR Compliant: Implements PSR-7 (HTTP Messages), PSR-18 (HTTP Client), and PSR-3 (Logger) standards
Why Choose Fetch PHP?
Beyond Guzzle
While Guzzle is a powerful HTTP client, Fetch PHP enhances the experience by providing:
- JavaScript-like API: Enjoy the familiar
fetch()API andasync/awaitpatterns from JavaScript - Global client management: Configure once, use everywhere with the global client
- Simplified requests: Make common HTTP requests with less code
- Enhanced error handling: Reliable retry mechanics and clear error information
- Type-safe enums: Use enums for HTTP methods, content types, and status codes
| Feature | Fetch PHP | Guzzle |
|---|---|---|
| API Style | JavaScript-like fetch + async/await + PHP-style helpers | PHP-style only |
| Client Management | Global client + instance options | Instance-based only |
| Request Syntax | Clean, minimal | More verbose |
| Types | Modern PHP 8.3+ enums | String constants |
| Helper Functions | Multiple styles available | Limited |
Installation
Requirements: PHP 8.3 or higher
Basic Usage
JavaScript-style API (Promise Chaining)
Or, using the client handler for more control:
PHP-style Helpers
Fluent API
Async/Await Pattern
Note: The async functions (
async,await,all,race,map,batch,retry) are provided by the jerome/matrix library, which is included as a dependency.
Using Async/Await
Multiple Concurrent Requests with Async/Await
Sequential Requests with Async/Await
Error Handling with Async/Await
Traditional Promise-based Pattern
Advanced Async Usage
Concurrent Requests with Promise Utilities
Controlled Concurrency with Map
Batch Processing
With Retries
Advanced Configuration
Automatic Retries
Fetch PHP automatically retries transient failures with exponential backoff.
- Default: 1 retry attempt (
ClientHandler::DEFAULT_RETRIES) with a 100 ms base delay - Default delay: 100 ms base with exponential backoff (when retries configured)
- Retry triggers:
- Network/connect errors (e.g., ConnectException)
- HTTP status codes: 408, 429, 500, 502, 503, 504, 507, 509, 520-523, 525, 527, 530 (customizable)
Configure per-request:
Notes:
- HTTP error statuses do not throw; you receive the response. Retries happen internally when configured.
- Network failures are retried and, if all attempts fail, throw a
Fetch\Exceptions\RequestException.
Authentication
Proxies
Global Client Configuration
Working with Responses
php use Fetch\Enum\Method; use Fetch\Enum\ContentType; use Fetch\Enum\Status;
// Use enums for HTTP methods $client = fetch_client(); $response = $client->request(Method::POST, '/users', $userData);
// Check HTTP status with enums if ($response->statusEnum() === Status::OK) { // Process successful response }
// Or use the isStatus helper if ($response->isStatus(Status::OK)) { // Process successful response }
// Content type handling $response = $client->withBody($data, ContentType::JSON)->post('/users');
## Error Handling
### Timeouts
Control both total request timeout and connection timeout:
If `connect_timeout` is not provided, it defaults to the `timeout` value.
### Logging and Redaction
When request/response logging is enabled via a logger, sensitive values are redacted:
- Headers: Authorization, X-API-Key, API-Key, X-Auth-Token, Cookie, Set-Cookie
- Options: `auth` credentials
Logged context includes method, URI, selected options (sanitized), status code, duration, and content length.
## Caching (sync-only)
> **Note:** Caching is available for synchronous requests only. Async requests intentionally bypass the cache.
Fetch PHP implements RFC 7234-aware HTTP caching with ETag/Last-Modified revalidation, `stale-while-revalidate`, and `stale-if-error` support. The default backend is an in-memory cache (`MemoryCache`), but you can use `FileCache` or implement your own backend via `CacheInterface`.
### Cache Behavior
- **Cacheable methods by default**: `GET`, `HEAD`
- **Cacheable status codes**: 200, 203, 204, 206, 300, 301, 404, 410 (RFC 7234 defaults)
- **Cache-Control headers respected**: `no-store`, `no-cache`, `max-age`, `s-maxage`, etc.
- **Revalidation**: Automatically adds `If-None-Match` (ETag) and `If-Modified-Since` (Last-Modified) headers for stale entries
- **304 Not Modified**: Merges headers and returns cached body
- **Vary headers**: Supports cache variance by headers (default: Accept, Accept-Encoding, Accept-Language)
### Basic Cache Setup
### Advanced Cache Configuration
### Per-Request Cache Control
## Connection Pooling & HTTP/2
Connection pooling enables reuse of TCP connections across multiple requests, reducing latency and improving performance. The pool is **shared globally** across all handler instances, and includes DNS caching for faster lookups.
### Enable Connection Pooling
### Enable HTTP/2
### Pool Management
> **Note**: The connection pool is static/global and shared across all handlers. Call `resetPool()` in your test teardown to ensure isolation between tests.
## Debugging & Profiling
Enable debug snapshots and optional profiling:
## Testing Support
Fetch PHP includes built-in testing utilities for mocking HTTP responses:
## Advanced Response Features
### Response Status Checks
### Response Helpers
## Connection Pool Management
Clean up connections or reset the pool (useful in tests):
## Async Notes
- Async requests use the same pipeline (mocking, profiling, logging) but bypass caching by design.
- Matrix helpers (`async`, `await`, `all`, `race`, `map`, `batch`, `retry`) are re-exported in `Fetch\Support\helpers.php`.
- Errors are wrapped with method/URL context while preserving the original exception chain.
- Use `$handler->async()` to enable async mode, or use the Matrix async utilities directly.
## License
This project is licensed under the **MIT License** – see the [LICENSE](LICENSE) file for full terms.
The MIT License allows you to:
- Use the software for any purpose, including commercial applications
- Modify and distribute the software
- Include it in proprietary software
- Use it without warranty or liability concerns
This permissive license encourages adoption while maintaining attribution requirements.
## Contributing
Contributions are welcome! We're currently looking for help with:
- Expanding test coverage
- Improving documentation
- Adding support for additional HTTP features
To contribute:
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/amazing-feature`)
3. Commit your Changes (`git commit -m 'Add some amazing-feature'`)
4. Push to the Branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## Acknowledgments
- Thanks to **Guzzle HTTP** for providing the underlying HTTP client
- Thanks to all contributors who have helped improve this package
- Special thanks to the PHP community for their support and feedbackAll versions of fetch-php with dependencies
ext-pcntl Version *
guzzlehttp/guzzle Version ^7.9
guzzlehttp/psr7 Version ^2.7
jerome/matrix Version ^3.4
psr/http-message Version ^1.0|^2.0
psr/log Version ^1.0|^2.0|^3.0
react/event-loop Version ^1.5
react/promise Version ^3.2