gpt4 book ai didi

php - 使用 Guzzle 6 HTTP 客户端检索整个 XML 响应主体

转载 作者:可可西里 更新时间:2023-10-31 22:10:31 26 4
gpt4 key购买 nike

我想使用 Guzzle 6 从远程 API 检索 xml 响应。这是我的代码:

$client = new Client([
'base_uri' => '<my-data-endpoint>',
]);
$response = $client->get('<URI>', [
'query' => [
'token' => '<my-token>',
],
'headers' => [
'Accept' => 'application/xml'
]
]);
$body = $response->getBody();

Vardumping $body 将返回一个 GuzzleHttp\Psr7\Stream 对象:

object(GuzzleHttp\Psr7\Stream)[453] 
private 'stream' => resource(6, stream)
...
...

然后我可以调用 $body->read(1024) 从响应中读取 1024 个字节(将以 xml 读取)。

但是,我想从我的请求中检索整个 XML 响应,因为稍后我需要使用 SimpleXML 扩展来解析它。

我怎样才能最好地从 GuzzleHttp\Psr7\Stream 对象检索 XML 响应,以便它可用于解析?

while 会循环吗?

while($body->read(1024)) {
...
}

非常感谢您的建议。

最佳答案

GuzzleHttp\Psr7\Stream 实现了 Psr\Http\Message\StreamInterface 的合约,它为您提供以下服务:

/** @var $body GuzzleHttp\Psr7\Stream */
$contents = (string) $body;

将对象转换为字符串将调用作为接口(interface)一部分的底层 __toString() 方法。 method name __toString() is special in PHP

由于 GuzzleHttp 中的实现“错过”提供对实际流句柄的访问,因此您无法使用允许更多“流线型”( stream-like) 操作,如 stream_copy_to_streamstream_get_contentsfile_put_contents。乍一看,这可能并不明显。

关于php - 使用 Guzzle 6 HTTP 客户端检索整个 XML 响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31784141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com