2

我有一个通用的 HTTP 文件访问 API,用于我正在处理的系统。为了使其尽可能灵活,它以 HTTP 字符串的形式返回请求和响应数据。

我目前正在通过AWS SDK for PHP 2实现与 S3 交互的版本。

有没有一种简单的方法可以快速获取 S3Client 在执行操作时发出的 Request 和 Response HTTP 请求?如果没有,是否有一种更零碎的方法可以让我不必伪造它?

基本上,我想要请求和响应的全文,或者至少访问相关数据(标题、响应代码、URL 等),以便我可以正确填充我的框架的返回数据。

谢谢。

4

2 回答 2

4

您可以从命令对象获取请求或响应对象。假设$s3拥有 的实例Aws\S3\S3Client,您可以执行以下操作:

$command = $s3->getCommand('ListObjects', array('Bucket' => '<bucket-name>'));
$request = $command->getRequest();
$response = $command->getResponse();

这些对象具有查看正文、标题、状态代码等的方法,您可以将它们转换为字符串以查看字符串形式。

如果您想在执行命令时快速查看请求和响应,您可以连接线记录器,并查看 STDOUT(或 STDERR)上的内容

$s3->addSubscriber(\Guzzle\Plugin\Log\LogPlugin::getDebugPlugin());
$s3->listObjects(array('Bucket' => '<bucket-name>'));
于 2013-01-23T21:35:53.850 回答
1

您需要查看Guzzle\Http\Client该类,它是 的祖先类S3Client,以查看它提供的方法。您始终可以在您自己的子节点中覆盖其中一些方法,S3Client以使您更轻松地访问此信息。

最终,您正在寻找的数据驻留在类的对象中Guzzle\Http\Message\Response,我相信它会被返回from Guzzle\Http\Client::send()

因此,也许在您自己的实现中,S3Client您可以覆盖send()发送 HTTP 请求的方法,然后根据需要处理响应数据。

于 2013-01-18T21:16:07.767 回答