php-http/discovery
php-http/discovery has 1,326 GitHub stars and 48 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-07 07:37 UTC. Last push 2025-12-10.
Finds installed clients and message factories
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalHTTPlug Discovery
This library provides auto-discovery and auto-installation of well-known PSR-17, PSR-18 and HTTPlug implementations.
Install
Via Composer
composer require php-http/discovery
Usage as a library author
Please see the official documentation.
If your library/SDK needs a PSR-18 client, here is a quick example.
First, you need to install a PSR-18 client and a PSR-17 factory implementations. This should be done only for dev dependencies as you don't want to force a specific implementation on your users:
composer require --dev symfony/http-client
composer require --dev nyholm/psr7
Then, you can disable the Composer plugin embeded in php-http/discovery
because you just installed the dev dependencies you need for testing:
composer config allow-plugins.php-http/discovery false
Finally, you need to require php-http/discovery and the generic implementations
that your library is going to need:
composer require 'php-http/discovery:^1.17'
composer require 'psr/http-client-implementation:*'
composer require 'psr/http-factory-implementation:*'
Now, you're ready to make an HTTP request:
use Http\Discovery\Psr18Client;
$client = new Psr18Client();
$request = $client->createRequest('GET', 'https://example.com');
$response = $client->sendRequest($request);
Internally, this code will use whatever PSR-7, PSR-17 and PSR-18 implementations that your users have installed.
Usage as a library user
If you use a library/SDK that requires php-http/discovery, you can configure
the auto-discovery mechanism to use a specific implementation when many are
available in your project.
For example, if you have both nyholm/psr7 and guzzlehttp/guzzle in your
project, you can tell php-http/discovery to use guzzlehttp/guzzle instead of
nyholm/psr7 by running the following command:
composer config extra.discovery.psr/http-factory-implementation GuzzleHttp\\Psr7\\HttpFactory
This will update your composer.json file to add the following configuration:
{
"extra": {
"discovery": {
"psr/http-factory-implementation": "GuzzleHttp\\Psr7\\HttpFactory"
}
}
}
Don't forget to run composer install to apply the changes, and ensure that
the composer plugin is enabled:
composer config allow-plugins.php-http/discovery true
composer install
Testing
composer test
Contributing
Please see our contributing guide.
Security
If you discover any security related issues, please contact us at [email protected].
License
The MIT License (MIT). Please see License File for more information.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,769 starspublic-apis/public-apis
A collective list of free APIs
496,989 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
440,739 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,139 stars