我尝试向外部API发帖时发生这种非常奇怪的事情,我尝试向URL发出POST请求但是Guzzle发出了GET请求(这是对此API的法律操作但返回了一些内容)不同)。
以下是代码:
$request = $this->client->createRequest('POST', 'sessions', [
'json' => [
'agent_id' => $agentId,
'url' => $url
],
'query' => [
'api_key' => $this->apiKey
]
]);
echo $request->getMethod(); // comes out as POST
$response = $this->client->send($request);
echo $request->getMethod(); // suddenly becomes GET
当我使用$this-client->post(…)
我真的不知道下一步该做什么。
答案 0 :(得分:2)
我遇到了同样的问题。 原因是当存在代码为301或302的位置重定向时,Guzzle会将Request-Method更改为“ GET”。 我在RedirectMiddleware.php中找到了“问题代码”。
但是,当您看到if条件时,可以通过在选项中添加'allow_redirects'=>['strict'=>true]
来禁用此行为。
找到此选项后,我发现该选项列在Guzzle Options Documentation
因此您必须像这样重写您的createRequest:
$request = $this->client->createRequest('POST', 'sessions', [
'json' => [
'agent_id' => $agentId,
'url' => $url
],
'query' => [
'api_key' => $this->apiKey
],
'allow_redirects'=> ['strict'=>true]
]);
并且重定向后,它应保留为方法POST
。
答案 1 :(得分:1)
尝试将关键字“查询”更改为“正文”。
答案 2 :(得分:1)
您可能正在获取3xx状态代码,以便Redirect
订阅者启动(默认情况下启用重定向)。来自docs:
[...]传递一个包含'max'键的关联数组来指定 重定向的最大数量,并可选择提供“严格”键 value,用于指定是否使用严格的RFC兼容重定向 (意味着使用POST请求重定向POST请求而不是做什么 大多数浏览器使用GET请求重定向POST请求。)
//编辑刚刚看到你在question comments回答了你自己的问题 - 仍在网上留下这个答案,因为它提供了一些背景信息。
答案 3 :(得分:0)
请从query
切换到form_params
。在Guzzle 6中有效。