An HTTPlug adapter for the React Http client.
Use Composer_ to install the React adapter. It will also install React as it's a dependency.
$ composer require php-http/react-adapterIf you need control on the React instances, you can inject them during initialization:
use Http\Adapter\React\Client;
$systemDnsConfig = React\Dns\Config\Config::loadSystemConfigBlocking();
if (!$config->nameservers) {
$config->nameservers[] = '8.8.8.8';
}
$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dnsResolver = $factory->create($config);
$connector = new React\Socket\Connector([
'dns' => $dnsResolver,
]);
$browser = new React\Http\Browser($connector);
$adapter = new Client($browser);
You can also use a ReactFactory in order to initialize React instances:
use Http\Adapter\React\ReactFactory; $reactHttp = ReactFactory::buildHttpClient();
Then you can use the adapter to send synchronous requests:
use GuzzleHttp\Psr7\Request;
$request = new Request('GET', 'http://httpbin.org');
// Returns a Psr\Http\Message\ResponseInterface
$response = $adapter->sendRequest($request);
Or send asynchronous ones:
use GuzzleHttp\Psr7\Request;
$request = new Request('GET', 'http://httpbin.org');
// Returns a Http\Promise\Promise
$promise = $adapter->sendAsyncRequest(request);
Note that since v4 calling wait on HttpPromisePromise is expected to run inside a fiber:
use function React\Async\async;
async(static function () {
// Returns a Http\Promise\Promise
$promise = $adapter->sendAsyncRequest(request);
// Returns a Psr\Http\Message\ResponseInterface
$response = $promise->wait();
})();