2015-06-22 9 views
32

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?

+7

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

risposta

51

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

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.

7

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.

+3

E per vecchio '' '" guzzlehttp/guzzle ":" 5.2.0 "' '' dovresti passare '' '['defaults' => [ ' auth '=> [' username ',' password '] ]] '' ' –

2

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, 
      ], 
     ]); 
0

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

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