Guzzle6
有一个漂亮的选择:allow_redirects
。如果将此选项设置为false
值,则当响应代码(例如302
或Headers
)具有Location
参数时,将限制重定向。
但是有一个问题。如果重定向是由客户端发送的,则Guzzle不会注意到这一点。例如:
我们有一些URL 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.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”修改响应的标题,以包含响应是重定向的事实。
返回响应。
关于javascript - 完全禁用Guzzle的重定向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33889405/