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 请求:发布正文数据的主要内容,如果未能解决你的问题,请参考以下文章