with headers guzzlehttp example debug auth php http basic-authentication guzzle

php - headers - guzzlehttp client example



¿Cómo hago la autenticación básica HTTP usando Guzzle? (7)

Quiero hacer la autenticación de acceso básico utilizando Guzzle y soy muy nuevo en programación. No tengo ni idea de qué hacer. Intenté hacer esto usando curl, pero mi entorno requiere usar guzzle.


De acuerdo con la documentación de Guzzle 6 , puede hacer una solicitud con autorización básica tan simple como esto:

$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();

NOTA: No necesita usar base64_encode () en absoluto porque ya lo hace antes de la solicitud.

He probado y funciona :)

Ver más en: Documentación Guzzle 6


En adicional a la respuesta @amenadiel. A veces es útil especificar parámetros de autenticación en el constructor:

$client = new Client([ ''auth'' => [''username'', ''password''], ]);

Entonces, cada solicitud utilizará estos parámetros de autenticación predeterminados.


Este trabajo no funcionó cuando usé Guzzlev6 y usé los consejos de @amenadiel. Cuando usas curl, tu sintaxis se vería como

curl -u [email protected]: contraseña http://service.com

detrás de la escena, en realidad toma el bit "[email protected]: password" , base64 lo codifica y envía la solicitud con un encabezado de "Autorización" con el valor codificado. Para este ejemplo, eso será:

Autorización: Básico c29tZW9uZUBnbWFpbC5jb206cGFzc3dvcmQ =

El consejo de @amenadiel adjuntó un encabezado "auth: username, password" y, por lo tanto, mi autenticación siguió fallando. Para lograr esto con éxito, simplemente elabore el encabezado cuando cree una instancia de una solicitud de Guzzle Client, es decir,

$client = new GuzzleHttp/Client(); $credentials = base64_encode(''[email protected]:password''); $response = $client->get(''http://www.server.com/endpoint'', [ ''Authorization'' => [''Basic ''.$credentials] ]);

Eso agregaría el encabezado como lo haría el rizo, y cualquier servicio al que intentes conectarte dejará de gritarte,

Aclamaciones.


Según lo que dijo @ bourgeois247 sobre la codificación de base64, lo siguiente funcionó perfectamente para mí en Guzzle 6:

$client = new Client(); $credentials = base64_encode(''username:password''); $response = $client->post(''url'', [ ''headers'' => [ ''Authorization'' => ''Basic '' . $credentials, ], ]);


Si está utilizando Guzzle 5.0 o más reciente , los documentos dicen que la autenticación básica se especifica mediante el parámetro auth:

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

Tenga en cuenta que la sintaxis es diferente si está utilizando Guzzle 3.0 o anterior . El constructor es diferente, y también necesita usar explícitamente el método de send en una solicitud para obtener una respuesta:

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


Si lo usas con Symfony, también puedes definirlo en tu archivo de configuración (config / packages / eight_points_guzzle.yaml para symfony4 o flex o config.yml para la otra versión)

En su archivo de configuración:

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: ~

Luego, en su servicio, controlador, etc ....

$client = $this->getContainer()->get(''eight_points_guzzle.client.your_service''); $response = $client->get(''yourRoute'');

Consulte: https://packagist.org/packages/eightpoints/guzzle-bundle


$response = $client->request( ''GET'', ''your_url'', [ ''auth'' => [ ''your_username'', ''your_password'' ], ''headers'' => [ ''if you want to pass something in the headers'' ] ] );