响应正文
HTTP 响应通常具有正文。
与 PSR-7 请求对象一样,PSR-7 响应对象将正文实现为 Psr\Http\Message\StreamInterface 的实例。你可以使用 PSR-7 响应对象的 getBody() 方法获取 HTTP 响应正文的 StreamInterface 实例。如果传出的 HTTP 响应长度未知或太大而无法放入内存中,getBody() 方法更可取。
$body = $response->getBody();
返回的 Psr\Http\Message\StreamInterface 实例提供以下方法来读取、迭代和写入其底层 PHP resource:
- getSize()
- tell()
- eof()
- isSeekable()
- seek()
- rewind()
- isWritable()
- write($string)
- isReadable()
- read($length)
- getContents()
- getMetadata($key = null)
通常情况下,你需要向 PSR-7 响应对象写入内容。你可以使用 write() 方法将内容写入 StreamInterface 实例,如下所示:
$body = $response->getBody();
$body->write('Hello');
你还可以使用全新的 StreamInterface 实例替换 PSR-7 响应对象的正文。当你想将内容从远程位置(例如文件系统或远程 API)导入到 HTTP 响应中时,这特别有用。你可以使用 withBody(StreamInterface $body) 方法替换 PSR-7 响应对象的正文。其参数必须是 Psr\Http\Message\StreamInterface 的实例。
use GuzzleHttp\Psr7\LazyOpenStream;
$newStream = new LazyOpenStream('/path/to/file', 'r');
$newResponse = $oldResponse->withBody($newStream);
Info
Response 对象是不可变的。该方法返回一个新的 Response 对象副本,其中包含新的正文。