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.

42
demandé sur Jeff Puckett 2015-06-22 03:35:30

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();
65
répondu amenadiel 2015-06-22 00:58:53

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.

11
répondu bourgeois247 2016-06-16 10:00:41

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.

11
répondu mnv 2016-11-23 08:15:32
$response = $client->request( 'GET', 'your_url', [
                    'auth'    => [
                        'your_username',
                        'your_password'
                    ],
                    'headers' => [
                        'if you want to pass something in the headers'
                    ]
                ]
            );
9
répondu Baach 2017-10-22 01:16:53

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

3
répondu Eric Gruby 2018-05-29 18:18:01

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,
            ],
        ]);
2
répondu Agu Dondo 2017-04-05 00:59:28

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

2
répondu HRoux 2018-08-08 11:36:53