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''
]
]
);