init
This commit is contained in:
60
vendor/react/socket/examples/22-http-client.php
vendored
Executable file
60
vendor/react/socket/examples/22-http-client.php
vendored
Executable file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
// Simple plaintext HTTP and secure HTTPS client example (for illustration purposes only).
|
||||
// This shows how an URI parameter can parsed to decide whether to establish
|
||||
// a plaintext TCP/IP or secure TLS connection and then send an
|
||||
// application level protocol message (HTTP).
|
||||
// Real applications should use react/http-client instead!
|
||||
//
|
||||
// Unlike examples #11 and #12, this example will actually take an optional URI
|
||||
// parameter and parse it to connect to the correct default port and use the
|
||||
// correct transport protocol.
|
||||
//
|
||||
// $ php examples/22-http-client.php
|
||||
// $ php examples/22-http-client.php https://reactphp.org/
|
||||
|
||||
use React\EventLoop\Factory;
|
||||
use React\Socket\ConnectionInterface;
|
||||
use React\Socket\Connector;
|
||||
use React\Stream\WritableResourceStream;
|
||||
|
||||
require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
$uri = isset($argv[1]) ? $argv[1] : 'www.google.com';
|
||||
|
||||
if (strpos($uri, '://') === false) {
|
||||
$uri = 'http://' . $uri;
|
||||
}
|
||||
$parts = parse_url($uri);
|
||||
|
||||
if (!$parts || !isset($parts['scheme'], $parts['host'])) {
|
||||
fwrite(STDERR, 'Usage error: required argument <host:port>' . PHP_EOL);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$loop = Factory::create();
|
||||
$connector = new Connector($loop);
|
||||
|
||||
if (!isset($parts['port'])) {
|
||||
$parts['port'] = $parts['scheme'] === 'https' ? 443 : 80;
|
||||
}
|
||||
|
||||
$host = $parts['host'];
|
||||
if (($parts['scheme'] === 'http' && $parts['port'] !== 80) || ($parts['scheme'] === 'https' && $parts['port'] !== 443)) {
|
||||
$host .= ':' . $parts['port'];
|
||||
}
|
||||
$target = ($parts['scheme'] === 'https' ? 'tls' : 'tcp') . '://' . $parts['host'] . ':' . $parts['port'];
|
||||
$resource = isset($parts['path']) ? $parts['path'] : '/';
|
||||
if (isset($parts['query'])) {
|
||||
$resource .= '?' . $parts['query'];
|
||||
}
|
||||
|
||||
$stdout = new WritableResourceStream(STDOUT, $loop);
|
||||
|
||||
$connector->connect($target)->then(function (ConnectionInterface $connection) use ($resource, $host, $stdout) {
|
||||
$connection->pipe($stdout);
|
||||
|
||||
$connection->write("GET $resource HTTP/1.0\r\nHost: $host\r\n\r\n");
|
||||
}, 'printf');
|
||||
|
||||
$loop->run();
|
||||
Reference in New Issue
Block a user