Guzzle HTTP请求从POST转换为GET

时间:2015-04-06 11:59:29

标签: php guzzle

我尝试向外部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(…)

时,会发生同样的事情

我真的不知道下一步该做什么。

4 个答案:

答案 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中有效。