完全禁用Guzzle的重定向

时间:2015-11-24 09:06:24

标签: javascript php redirect guzzle guzzle6

Guzzle6有一个很好的选择:allow_redirects。如果将此选项设置为false值,则如果302Headers等响应代码具有Location参数,则Guzzle阻止重定向。

但有一个问题。如果重定向由客户端发送 - Guzzle没有注意到这一点。例如:

我们有一些网址http://example.com/已重定向到网页http://redirected.com/。发送请求帮助Guzzle:

$oClient->request('POST', 'http://redirected.com/', [
    'form_params' => $aFormData,
    'cookies' => (new CookieJar($aPrepareCookie)),
    'debug' => true,
    'allow_redirects' => false
]);

假设redirect.comindex.php这样:

<?php
    header('Location: http://www.example.com/');
?>

在这种情况下,重定向将被Guzzle阻止。

现在,让我们看一下这个重定向示例:

<?php
    echo '<script>window.location = "http://www.example.com/";</script>';
?>

我们遇到了问题,因为这是客户端重定向,他不会影响Headers,因此Guzzle无法跟踪HTTP状态代码或位置值。

那么,我如何解决这个问题并找到解决方案?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

正如之前的海报所说,Guzzle不会执行javascript。

使用Guzzle Middleware可以轻松解决您的问题。

在中间件中:

  • 收到回复
  • 解析body.location =&#34; someurl&#34;
  • 的正文
  • 执行&#34; someurl&#34;
  • 的请求
  • 修改来自&#34; someurl&#34;的回复标题。包括它是一个重定向的事实。
  • 返回回复。