0

Guzzle6有一个漂亮的选择:allow_redirects. 如果将此选项设置为falsevalue,则 Guzzle 阻止重定向如果响应代码喜欢302Headers具有Location参数。

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

我们有一些 URLhttp://example.com/重定向到 page 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 状态代码或位置值。

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

感谢帮助!

4

1 回答 1

1

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

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

在中间件内:

  • 收到回复
  • 解析 window.location="someurl" 的主体
  • 执行“someurl”请求
  • 修改来自“someurl”的响应标头以包含它是重定向的事实。
  • 返回响应。
于 2015-11-24T16:30:09.130 回答