我想使用Guzzle进行基本的访问身份验证,我对编程很新。我不知道该怎么做。我试图用curl做这个,但我的环境需要使用guzzle。
答案 0 :(得分:76)
如果你使用 Guzzle 5.0或更新版,the docs说使用auth参数指定基本身份验证:
$client = new GuzzleHttp\Client();
$response = $client->get('http://www.server.com/endpoint', [
'auth' => [
'username',
'password'
]
]);
如果您使用 Guzzle 3.0或更早版本,请注意syntax is different。构造函数不同,您还需要在请求上显式使用send
方法来获取响应:
$client = new Guzzle\Http\Client();
$request = $client->get('http://www.server.com/endpoint');
$request->setAuth('username', 'password');
$response = $request->send();
答案 1 :(得分:15)
除了@amenadiel的回答。有时在构造函数中指定auth参数:
$client = new Client([
'auth' => ['username', 'password'],
]);
然后每个请求都将使用此默认身份验证参数。
答案 2 :(得分:12)
当我使用Guzzlev6并使用@amenadiel的建议时,此工作正常。当您使用curl时,您的语法看起来像
curl -u someone@gmail.com:密码 http://service.com
幕后它实际上需要" someone@gmail.com:密码" 位,base64对其进行编码并通过"授权&发送请求#34; 带有编码值的标头。对于这个例子,那将是:
授权:基本c29tZW9uZUBnbWFpbC5jb206cGFzc3dvcmQ =
来自@amenadiel的建议附加了" auth:用户名,密码" 标头,因此我的身份验证仍然失败。要成功实现这一点,只需在实例化Guzzle客户端请求时设计标题,即
$client = new GuzzleHttp\Client();
$credentials = base64_encode('someone@gmail.com:password');
$response = $client->get('http://www.server.com/endpoint', [
'Authorization' => ['Basic '.$credentials]
]);
这会将标题附加为curl,并且您尝试连接的任何服务都将停止对您大喊大叫,
干杯。
答案 3 :(得分:10)
$response = $client->request( 'GET', 'your_url', [
'auth' => [
'your_username',
'your_password'
],
'headers' => [
'if you want to pass something in the headers'
]
]
);
答案 4 :(得分:7)
根据 Guzzle 6 文档,您可以使用基本授权执行请求,如下所示:
$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();
注意:您根本不需要使用base64_encode(),因为它已经在请求之前完成了。
我已经过测试并且有效:)
答案 5 :(得分:4)
根据@bourgeois247关于base64编码的说法,以下内容对我来说非常适合Guzzle 6:
$client = new Client();
$credentials = base64_encode('username:password');
$response = $client->post('url',
[
'headers' => [
'Authorization' => 'Basic ' . $credentials,
],
]);
答案 6 :(得分:3)
如果将它与symfony一起使用,也可以在配置文件中定义它(对于symfony4,则为config / packages / eight_points_guzzle.yaml;对于其他版本,则为flex或config.yml)
在您的配置文件中:
eight_points_guzzle:
clients:
your_service:
# Write here the host where to do requests
base_url: "yourURL"
options:
timeout: 30
auth:
- yourLogin # login
- yourPassword # password
plugin: ~
然后,在您的服务,控制器等中……
$client = $this->getContainer()->get('eight_points_guzzle.client.your_service');
$response = $client->get('yourRoute');
请参阅:https://packagist.org/packages/eightpoints/guzzle-bundle
答案 7 :(得分:3)
您还可以在实例化客户端时配置auth参数,而不是将其添加到每个请求中:
$this->client = new \GuzzleHttp\Client([
'base_uri' => $this->endpoint,
'headers' => [
'Authorization' => ['Basic'.base64_encode($this->username.':'.$this->password)],
],
]);
以下是Guzzle 6的各种文档链接: