Guzzle 请求:发布正文数据

Posted

技术标签:

【中文标题】Guzzle 请求:发布正文数据【英文标题】:Guzzle Request : Post body data 【发布时间】:2020-04-12 20:14:58 【问题描述】:

我正在尝试将POST 数据发送到远程 AWS API。

数据应该是body 部分上的JSON

使用 Postman,我可以发送数据并且一切正常:

现在,我正在尝试使用GuzzleHttp\Psr7\Request 这样做:

$request = new \GuzzleHttp\Psr7\Request(
            'POST',
            'AWS API URL',
            ['Host' => 'AWS HOST', 'body' => '"json": "my JSON"']
        );
$request = $signer->signRequest($request, $credentials);
$response = $client->send($request);

请求成功,但没有数据更新!好像没有收到'body'

我无权访问远程 API 日志文件。

所以我的问题是,这是在 Guzzle 请求的正文部分中发布数据的正确方法吗?

谢谢。

【问题讨论】:

这能回答你的问题吗? How can I use Guzzle to send a POST request in JSON? @Jeto,我已经编辑了我的问题,request 应该签名。所以我应该提供关于请求对象的数据,而不是client->send()。至少,这是我的分析。 【参考方案1】:

根据链接的答案,您需要将以下选项与您的请求一起传递:

[GuzzleHttp\RequestOptions::JSON => ['key1' => 'value1', 'key2' => 'val2']] 

或:

['json' => ['key1' => 'value1', 'key2' => 'val2']]

但是既然你需要先构建你的Request对象,你应该可以把这个选项作为Client::send的第二个参数传递:

$response = $client->send($request, [
  GuzzleHttp\RequestOptions::JSON => ['key1' => 'value1', 'key2' => 'val2']
];

【讨论】:

以上是关于Guzzle 请求:发布正文数据的主要内容,如果未能解决你的问题,请参考以下文章

Guzzle 使用嵌套数组发布多部分请求

如何从 guzzle 请求中获取和显示图像

PHP 使用 Guzzle 执行 HTTP 请求

PHP 使用 Guzzle 执行 HTTP 请求

POST 请求适用于 Postman,但不适用于 Guzzle

PHP Guzzle接口请求库应用