【问题标题】:Using Guzzle, is it possible to modify basic authentication prior to redirect?使用 Guzzle,是否可以在重定向之前修改基本身份验证?
【发布时间】:2017-04-03 11:50:18
【问题描述】:

我们需要测试一个重定向到另一个 url 的 url。两者都使用基本身份验证进行保护,但是重定向 url 需要另一组凭据。

是否可以修改请求以更改新/重定向 url 的基本身份验证凭据。

Guzzle 有一个 allow_redirects(doc) 选项和一个 on_redirect 回调,它可以访问请求和响应对象。

我们将如何修改请求以提供新凭据?

【问题讨论】:

  • 重定向意味着将状态码发送回客户端。 客户端然后转到新位置,可能在另一台服务器上。
  • 知道了,谢谢奥拉夫
  • 我想你想要Middleware::mapRequestsee here
  • @OlafDietsche:是的,但我想知道 Guzzle 是否会“自动跟随”重定向,因此客户端看不到它。正如 Alexey 在下面的回答中所说,可以禁用该功能。
  • @halfer 感谢您的更正。我错过了服务器是这里的客户端。

标签: .htaccess redirect basic-authentication guzzle


【解决方案1】:

IMO 最简单的方法是通过完全禁用重定向来“手动”执行此操作,并在这种情况下手动处理它们。

使用此解决方案,您可以使用任何新的/修改的选项创建第二个请求。

$initialResponse = $client->get(
    '/',
    [
        'allow_redirects' => false,
        'auth' => ['user1', 'pass1'],
    ]
);

// Check the exact status code from the redirect response.
if ($initialResponse->getStatusCode() === 303) {
    $finalResponse = $client->get(
        $initialResponse->getHeader('Location')[0],
        [
            'auth' => ['user2', 'pass2'],
        ]
    );
}

如果您想创建一个真正透明(针对最终用户)的解决方案,那么我建议您更深入地研究中间件。

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多