1--TEST-- 2swoole_server: http request & response 3--SKIPIF-- 4<?php 5require __DIR__ . '/../include/skipif.inc'; 6?> 7--FILE-- 8<?php 9require __DIR__ . '/../include/bootstrap.php'; 10 11use Swoole\Server; 12use Swoole\Constant; 13use Swoole\Http\Request; 14use Swoole\Http\Response; 15use Swoole\Coroutine\Http\Client; 16use function Swoole\Coroutine\run; 17 18define('GREETER', 'hello world'); 19 20$pm = new SwooleTest\ProcessManager; 21 22$pm->parentFunc = function ($pid) use ($pm) { 23 run(function () use ($pm) { 24 $httpClient = new Client(HTTP_SERVER_HOST, $pm->getFreePort(), false); 25 $httpClient->setMethod("POST"); 26 $httpClient->setData("HELLO"); 27 $ok = $httpClient->execute("/rawcookie?hello=world&value=1"); 28 Assert::assert($ok); 29 Assert::same($httpClient->statusCode, 200); 30 Assert::same($httpClient->errCode, 0); 31 Assert::eq($httpClient->getHeaders()['x-server'], 'swoole'); 32 Assert::same($httpClient->getBody(), GREETER); 33 echo "DONE\n"; 34 }); 35 $pm->kill(); 36}; 37 38$pm->childFunc = function () use ($pm) { 39 $serv = new Server('127.0.0.1', $pm->getFreePort(), SERVER_MODE_RANDOM); 40 $serv->set([ 41 'worker_num' => 1, 42 'log_file' => '/dev/null', 43 'open_http_protocol' => true, 44 ]); 45 $serv->on("Start", function ($serv) use ($pm) { 46 $pm->wakeup(); 47 }); 48 $serv->on('receive', function (Server $serv, $fd, $reactor_id, $data) { 49 $req = Request::create(); 50 Assert::eq($req->parse($data), strlen($data)); 51 52 $resp = Response::create([$serv, $req], $fd); 53 $resp->header('X-Server', 'swoole'); 54 $resp->end(GREETER); 55 Assert::eq($resp->fd, $fd); 56 Assert::eq($req->fd, $fd); 57 }); 58 $serv->on(Constant::EVENT_CLOSE, function (Server $serv, $fd, $reactor_id) { 59 }); 60 $serv->start(); 61}; 62 63$pm->childFirst(); 64$pm->run(); 65?> 66--EXPECT-- 67DONE 68