Guzzle6
有一个漂亮的选项:allow_redirects
。如果将此选项设置为 false
值,如果 302
或 Headers
等响应代码具有 Location
参数,Guzzle 会阻止重定向。
但是有一个问题。如果重定向由客户端发送 – Guzzle 不会注意到这一点。例如:
我们有一些重定向到页面 http://redirected.com/
的 URL http://example.com/
。在 Guzzle 帮助下发送请求:
$oClient->request('POST', 'http://redirected.com/', [
'form_params' => $aFormData,
'cookies' => (new CookieJar($aPrepareCookie)),
'debug' => true,
'allow_redirects' => false
]);
假设redirect.com
有index.php
,如下所示:
<?php
header('Location: http://www.example.com/');
?>
在这种情况下,Guzzle 将阻止重定向。
现在,让我们看看这个重定向示例:
<?php
echo '<script>window.location = "http://www.example.com/";</script>';
?>
这里我们遇到了一个问题,因为这是客户端重定向,他不能影响 Headers
,因此 Guzzle
无法跟踪 HTTP 状态代码或位置值。
那么,我该如何解决这个问题并找到解决方案?
感谢您的帮助!
最佳答案
正如之前的发帖者所说,Guzzle 不会执行 javascript。
使用 Guzzle Middleware 可以轻松解决您的问题.
在中间件内:
- 收到回复
- 解析 window.location="someurl"的正文
- 执行“someurl”请求
- 修改“someurl”响应的 header 以包含它是重定向的事实。
- 返回响应。
关于javascript - 完全禁用 Guzzle 的重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33889405/