Comment puis-je effectuer L'authentification HTTP basic en utilisant Guzzle?
je veux faire l'authentification d'accès de base en utilisant Guzzle et je suis très nouveau à la programmation . je n'ai aucune idée de quoi faire. J'ai essayé de le faire en utilisant curl mais mon environnement nécessite l'utilisation de guzzle.
7 réponses
Si vous utilisez Bouffer 5.0 ou plus récent,la documentation dire que l'auth de base est spécifié en utilisant le paramètre auth:
$client = new GuzzleHttp\Client();
$response = $client->get('http://www.server.com/endpoint', [
'auth' => [
'username',
'password'
]
]);
veuillez noter que le la syntaxe est différente si vous utilisez Bouffer 3.0 ou antérieure. Le constructeur est différent, et vous devez aussi utiliser explicitement le send
méthode sur une demande visant à obtenir une réponse:
$client = new Guzzle\Http\Client();
$request = $client->get('http://www.server.com/endpoint');
$request->setAuth('username', 'password');
$response = $request->send();
cette peinture fonctionne quand J'ai utilisé Guzzlev6 et utilisé les conseils de @amenadiel. Lorsque vous utilisez curl, votre syntaxe ressemblerait à quelque chose comme
curl-u someone@gmail.com:password http://service.com
dans les coulisses, il prend en fait le "someone@gmail.com:password" bit, base64 l'encode et envoie la requête avec un "Autorisation" en-Tête avec la valeur codée. Pour ce exemple, qui sera:
conseils de @amenadiel en annexe un "auth: nom d'utilisateur,mot de passe" en-tête et par conséquent, mon authentification continuait d'échouer. Pour y parvenir, il suffit de créer l'en-tête lorsque vous instanciez une requête client Guzzle, I. e
$client = new GuzzleHttp\Client();
$credentials = base64_encode('someone@gmail.com:password');
$response = $client->get('http://www.server.com/endpoint', [
'Authorization' => ['Basic '.$credentials]
]);
cela ajouterait l'en-tête comme curl le ferait, et quel que soit le service auquel vous essayez de vous connecter, arrêter de crier à vous,
Cheers.
en plus de la réponse de @amenadiel. Parfois pratique spécifiez les paramètres auth dans le constructeur:
$client = new Client([
'auth' => ['username', 'password'],
]);
alors chaque requête utilisera les paramètres auth par défaut.
$response = $client->request( 'GET', 'your_url', [
'auth' => [
'your_username',
'your_password'
],
'headers' => [
'if you want to pass something in the headers'
]
]
);
Selon Bouffer 6 la documentation, vous pouvez faire une demande auprès d'autorisation de base aussi simple que cela:
$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();
NOTE: vous n'avez pas besoin d'utiliser base64_encode() car il le fait déjà avant la requête.
j'ai testé et ça fonctionne :)
Voir plus sur: Bouffer 6 Documentation
selon ce que @bourgeois 247 a dit à propos de l'encodage base64, ce qui suit a fonctionné parfaitement pour moi sur Guzzle 6:
$client = new Client();
$credentials = base64_encode('username:password');
$response = $client->post('url',
[
'headers' => [
'Authorization' => 'Basic ' . $credentials,
],
]);
Si vous l'utilisez avec symfony, vous pouvez également définir dans votre fichier de configuration (config/packages/eight_points_guzzle.yaml pour symfony4 ou flex ou config.yml pour l'autre version)
Dans votre fichier de configuration :
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: ~
puis, à votre service, contrôleur,etc....
$client = $this->getContainer()->get('eight_points_guzzle.client.your_service');
$response = $client->get('yourRoute');
https://packagist.org/packages/eightpoints/guzzle-bundle