php - 如何使用 Guzzle 进行 HTTP 基本身份验证?

标签 php http basic-authentication guzzle

我想使用 Guzzle 进行基本的访问身份验证,而且我对编程还很陌生。我不知道该怎么办。我尝试使用 curl 执行此操作,但我的环境需要使用 guzzle。

最佳答案

如果您使用的是 Guzzle 5.0 或更新版本the docs假设基本身份验证是使用 auth 参数指定的:

$client = new GuzzleHttp\Client();
$response = $client->get('http://www.server.com/endpoint', [
    'auth' => [
        'username', 
        'password'
    ]
]);

请注意 syntax is different如果您使用的是 Guzzle 3.0 或更早版本。构造函数不同,您还需要在请求上显式使用 send 方法以获得响应:

$client = new Guzzle\Http\Client();
$request = $client->get('http://www.server.com/endpoint');
$request->setAuth('username', 'password');
$response = $request->send();

一个简短的附录

作为对@Matthwew-Knill 的回应,是的,您可以设置默认授权并隐式地让 Guzzle 在每个进一步的请求中发送它。 @Nick 的回答是正确的。客户端构造函数采用您能想到的每个参数,然后是一些。

如果您想发挥创意,另一种方法是实例化客户端,将默认 header 传递给它,以便在每个进一步的请求中发送。毕竟,简单例份验证是一个 Authorization header 。它的计算方式为:

$client = new Client([
  'headers'=>[
       'Authorization'=> Basic base64_encode(<username>:<password>)
   ]
 ]);

最后但并非最不重要的一点请注意,填写一个简单的身份验证对话框只会发生一次(在第一次访问给定 session 时)。这通常通过在访问者的浏览器上设置 cookie 来实现。该 cookie 又包含足够的信息供服务器识别其匹配的事件 session 。

通常,Guzzle 请求是无状态的,但您可以使用中间件链配置 Guzzle 以修改请求或响应,以用于调试目的,并在此用例中记住 cookie,从而成为部分有状态的。

Please check the detailed procedure in Guzzle Docs .重要的是,通过使用 cookiejar 中间件实例化客户端,因此从那时起让客户端包含它,第一个请求将记住服务器的 set-cookie header ,并将在每次发送时发送它进一步的 cookie header ,使服务器将客户端识别为已登录用户。当然,您也可以自己检查第一个响应的 header ,然后发送它的值。

可能还有其他方法,但我现在想不出其他方法。

关于php - 如何使用 Guzzle 进行 HTTP 基本身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970736/

相关文章:

c++ - 简单的 Http 获取响应

php - 将mysql查询结果分组到php生成的表中,并将表行的结果与相同的id相加

java - 如何从 HttpMethodParams 获取值

http - HTTP_X_FORWARDED_FOR 和 HTTP_FORWARDED 有什么区别

javascript - Dojo JsonRest 基本身份验证

api - Yii 2 RESTful API 使用 HTTP Basic 进行身份验证(Yii 2 高级模板)

spring - 使用Spring Security修改基本身份验证授权流程?

当 php 回显时,Javascript 不工作

php - 在 WordPress 中指定 TinyMCE 编辑器字体颜色?

php - 如何在 while 循环中获取某些数据而不重新分配