当我使用Guzzlev6并使用@amenadiel的建议时,这一点很有效。 curl-u某人@gmail.com:密码http://service.com 在后台,它实际上接受**"www.example.com:password"位,base64对其进行编码,并发送带有"Authorization"标头和编码值的请求。对于本例,这将是:someone@gmail.com:password"bit, base64 encodes it and sends the request with an"Authorization"**Header with the encoded value. For this example, that will be: 授权:基本值= @amenadiel的建议附加了"授权:username,password "**头,因此我的身份验证一直失败。要成功实现这一点,只需在示例化Guzzle客户端请求时创建头,即
$client = new Client();
$response = $client->request(
'POST', /*instead of POST, you can use GET, PUT, DELETE, etc*/
$url,
[
'auth' => ['username', 'password'] /*if you don't need to use a password, just leave it null*/
]
);
echo $response->getBody();
8条答案
按热度按时间u3r8eeie1#
如果您使用的是Guzzle 5.0或更高版本,文档中说明基本身份验证是使用auth参数指定的:
请注意,如果您使用的是Guzzle 3.0或更早版本,则syntax is different.构造函数是不同的,并且您还需要在请求上显式使用
send
方法来获得响应:一个简短的附录
对于@Matthwew-Knill的回答,是的,您可以设置一个默认授权,并隐式地让Guzzle在以后的每个请求中发送它。@Nick的回答很中肯。客户端构造函数接受您能想到的每个参数,然后是一些参数。
另一种方法,如果你想创造性的话,可以示例化客户端,传递它的默认头,在以后的每一个请求中发送。简单auth毕竟是一个
Authorization
头,计算如下:最后但并非最不重要的是,请注意,填写一个简单的验证对话框只发生一次(在第一次访问一个给定的会话)。这通常是通过设置一个cookie在访问者的浏览器。该cookie反过来包含足够的信息,服务器识别其匹配的活动会话。
通常,Guzzle请求是无状态的,但是您可以使用中间件链来配置Guzzle,以修改请求或响应,用于调试目的,并且在本用例中,记住cookie,从而成为部分有状态的。
请查看Guzzle Docs中的详细过程。重要的是,通过使用cookiejar中间件示例化客户端,从而让客户端从那时起包含它,第一个请求将记住服务器的
set-cookie
头,并将其作为每隔一个cookie
头发送,使服务器将客户端识别为登录用户。当然,您也可以自己检查第一个响应的报头,然后发送其值。可能还有其他办法,但我现在想不出其他办法。
ca1c2owp2#
除了@amenadiel应答。有时方便在构造函数中指定auth参数:
那么每个请求都将使用这个默认的auth参数。
am46iovg3#
当我使用Guzzlev6并使用@amenadiel的建议时,这一点很有效。
curl-u某人@gmail.com:密码http://service.com
在后台,它实际上接受**"www.example.com:password"位,base64对其进行编码,并发送带有"Authorization"标头和编码值的请求。对于本例,这将是:someone@gmail.com:password"bit, base64 encodes it and sends the request with an"Authorization"**Header with the encoded value. For this example, that will be:
授权:基本值=
@amenadiel的建议附加了"授权:username,password "**头,因此我的身份验证一直失败。要成功实现这一点,只需在示例化Guzzle客户端请求时创建头,即
这将像curl那样附加头,无论您尝试连接到什么服务,都将停止对您大喊大叫,
干杯。
mxg2im7a4#
根据Guzzle 6文档,您可以使用基本授权执行请求,如下所示:
我已经测试过了,它的工作:)
更多信息请访问:狂饮6文档
cnjp1d6j5#
o3imoua46#
您还可以在示例化客户端时配置auth参数,而不是将其添加到每个请求中:
以下是Guzzle 6的各种文档链接:
vzgqcmou7#
根据@assourgesis247关于base64编码的说法,以下代码在我的Guzzle 6上运行得非常完美:
x7rlezfr8#
如果将其与symfony一起使用,还可以在配置文件中定义它(对于symfony4为config/packages/eight_points_guzzle. yaml,对于其他版本为flex或config. yml)
在配置文件中:
然后,在您的服务,控制器等....
参见:https://packagist.org/packages/eightpoints/guzzle-bundle