◆ \http\Client のインスタンスはリクエストのたびに作らず使いまわすのに向いてそう
◆ \http\Client\Request のインスタンスを Client の enqueue メソッドでキュー複数追加できる
◆ Client の send メソッドでキューのリクエストが実行される
◆ enqueue でリクエストと一緒にコールバックを設定していたらレスポンスを取得したら実行される
◆ Client の getResponse メソッドを繰り返して順にレスポンスを取り出すこともできる

◆ POST の body は Request のコンストラクタの 4 つめで \http\Message\Body を設定できる
◆ Body の addForm メソッドが連想配列で key-value と file を簡単に指定できるので便利

前記事の続き

載ってないページには全然情報がなかったのですが ドキュメントの一部のメソッドの詳細ページだと使えそうなサンプルが載っていました
ここ とか ここ とか

わかりづらかった response body 取得するところ POST でファイルとテキスト送信するところのサンプルです

<?php
$client = new \http\Client();

$client->enqueue(
new \http\Client\Request("GET", "https://www.google.com"),
function($res){
echo $res->getBody()->toString();
return true;
}
)->send();

echo "\n---\n\n";

file_put_contents('/tmp/file', 'text');

$client->enqueue(
new \http\Client\Request(
"POST",
"http://httpbin.org/post",
null,
(new \http\Message\Body())->addForm(
[
'foo' => 'bar',
'key' => 'a817c7bd730f9a08',
'tes' => 't',
],[
[
'name' => 'file',
'type' => 'text/plain',
'file' => '/tmp/file',
],
]
)
),
function($res){
echo $res->getBody()->toString();
return true;
}
)->send();
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.jp/?gfe_rd=cr&amp;dcr=0&amp;ei=traWWtrVEcKuX6i7uNgE">here</A>.
</BODY></HTML>

---

{
"args": {},
"data": "",
"files": {
"file": "text"
},
"form": {
"foo": "bar",
"key": "a817c7bd730f9a08",
"tes": "t"
},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Content-Length": "402",
"Content-Type": "multipart/form-data; boundary=\"ead5c258.3feb8560\"",
"Host": "httpbin.org",
"User-Agent": "PECL_HTTP/3.1.0 PHP/7.0.13 libcurl/7.51.0"
},
"json": null,
"origin": "111.111.111.111",
"url": "http://httpbin.org/post"
}