Php Guzzle HTTP请求从POST转换为GET

Php Guzzle HTTP请求从POST转换为GET,php,guzzle,Php,Guzzle,我在尝试向外部API发送post时遇到了一件非常奇怪的事情,我尝试向URL发送post请求,但Guzzle却发出GET请求(这是对该API的一项法律行动,但返回了一些不同的结果) 代码如下: $request = $this->client->createRequest('POST', 'sessions', [ 'json' => [ 'agent_id' => $agentId, 'url' => $url ], 'query' =&

我在尝试向外部API发送post时遇到了一件非常奇怪的事情,我尝试向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(…)


我真的不知道下一步该怎么办。

尝试将键“query”更改为“body”。

您可能会得到一个3xx状态代码,以便
重定向
订户启动(默认情况下启用重定向)。从:

[…]传递包含要指定的“max”键的关联数组 重定向的最大数量,并可选择提供“严格”密钥 值指定是否使用严格的RFC兼容重定向 (意思是用POST请求重定向POST请求,而不是做什么 大多数浏览器都会使用GET请求重定向POST请求


//edit刚才看到您自己在中回答了这个问题-由于它提供了一些上下文,所以仍将此答案保留在联机状态。

请将
query
切换到
form\u params
。在Guzzle 6中,它工作正常。

我遇到了同样的问题。 原因是Guzzle在存在代码为301或302的位置重定向时将请求方法更改为“GET”。 我在文件中找到了“问题代码”

但是当您看到if条件时,您可以通过在选项中添加
'allow\u redirects'=>['strict'=>true]
来禁用此行为。 找到此选项后,我发现该选项列在

因此,您必须像这样重写您的createRequest:

$request = $this->client->createRequest('POST', 'sessions', [
  'json' => [
    'agent_id' => $agentId,
    'url' => $url
  ],
  'query' => [
    'api_key' => $this->apiKey
  ],
  'allow_redirects'=> ['strict'=>true]
]); 

在重定向之后,它应该保持方法
POST

当debug选项为true时,您会得到什么?客户是否真的发送了帖子或GET?结果是我的身体无效,我被重定向了。谢谢你的调试建议,我不知道这是可用的。