Voglio fare l'autenticazione di accesso di base usando Guzzle e sono molto nuovo alla programmazione. non ho idea di cosa fare. Ho provato a farlo usando curl ma il mio ambiente richiede l'utilizzo di guzzle.Come si fa l'autenticazione di base HTTP usando Guzzle?
risposta
Se stai usando gozzovigliare 5.0 o più recente, the docs dicono che autenticazione di base viene specificato utilizzando il parametro auth:
$client = new GuzzleHttp\Client();
$response = $client->get('http://www.server.com/endpoint', [
'auth' => [
'username',
'password'
]
]);
Si prega di notare che il syntax is different se si sta utilizzando gozzovigliare 3.0 o versioni precedenti. Il costruttore è diversa, ed è anche necessario utilizzare in modo esplicito il metodo send
su una richiesta per ottenere una risposta:
$client = new Guzzle\Http\Client();
$request = $client->get('http://www.server.com/endpoint');
$request->setAuth('username', 'password');
$response = $request->send();
Questo lavoro a furia quando ho usato Guzzlev6 e usato il consigliare dai @amenadiel. Quando si utilizza riccio, la sintassi sarebbe simile
ricciolo -u [email protected]: Passwordhttp://service.com
dietro le quinte che ci vuole in realtà il "[email protected] : password " bit, base64 lo codifica e invia la richiesta con " Autorizzazione " Intestazione con il valore codificato. Per questo esempio, che sarà:
Autorizzazione: Base c29tZW9uZUBnbWFpbC5jb206cGFzc3dvcmQ =
Consigli da @amenadiel aggiunto un "Autenticazione: username, password" intestazione e, di conseguenza, il mio l'autenticazione continuava a fallire. Per raggiungere questo obiettivo con successo, proprio mestiere l'intestazione quando si è un'istanza di una richiesta del client Guzzle, cioè
$client = new GuzzleHttp\Client();
$credentials = base64_encode('[email protected]:password');
$response = $client->get('http://www.server.com/endpoint', [
'Authorization' => ['Basic '.$credentials]
]);
Che sarebbe aggiungere l'intestazione come ricciolo sarebbe, e qualsiasi servizio che si sta tentando di connettersi si fermerà urlare contro di voi,
Cheers.
In aggiunta alla risposta @amenadiel. A volte utile specificare i parametri di autenticazione nel costruttore:
$client = new Client([
'auth' => ['username', 'password'],
]);
Quindi ogni richiesta utilizzerà questi parametri di autenticazione predefiniti.
E per vecchio '' '" guzzlehttp/guzzle ":" 5.2.0 "' '' dovresti passare '' '['defaults' => [ ' auth '=> [' username ',' password '] ]] '' ' –
Secondo quanto @ bourgeois247 detto circa la codifica Base64, la seguente ha funzionato perfettamente per me su Guzzle 6:
$client = new Client();
$credentials = base64_encode('username:password');
$response = $client->post('url',
[
'headers' => [
'Authorization' => 'Basic ' . $credentials,
],
]);
Secondo la documentazione Guzzle, si può fare una richiesta con l'autorizzazione di base semplice come questo:
try{
$res = $client->request(
'POST', /*instead of POST, you can use GET, PUT, DELETE, etc*/
'URL_GOES_HERE',
[
'auth' => ['username', 'password', 'basic'] /*if you don't need to use a password, just leave it null*/
]
);
echo $res->getStatusCode();
echo $res->getHeader('content-type');
$res->getBody();
}catch(Exception $e){
echo $e->getMessage();
}
NOTA: non è necessario utilizzare base64_encode() a tutti.
ho provato e funziona :)
$response = $client->request('GET', 'your_url', [
'auth' => [
'your_username',
'your_password'
],
'headers' => [
'if you want to pass something in the headers'
]
]
);
Si dovrebbe davvero cercare di pasta di qualsiasi codice che hai provato per aumentare le probabilità di ottenere una risposta significativa. Semplicemente affermando il tuo bisogno e la tua mancanza di conoscenza, avrai appena svalutato :( – amenadiel