2015-06-22 1 views
32

Я хочу сделать базовую аутентификацию доступа с помощью Guzzle, и я очень новичок в программировании. я понятия не имею, что делать. Я попытался сделать это, используя curl, но моя среда требует использования жужжания.Как сделать базовую аутентификацию HTTP с помощью Guzzle?

+7

Вы действительно должны попробовать и вставить любой код, вы пытались повысить свои шансы на получение значимого ответа. Просто заявляя о своей потребности и неясности, вы просто получите вниз :( – amenadiel

ответ

51

Если вы используете жрать 5.0 или более поздней версии, the docs сказать, что основной аутентификации задается с помощью параметра аутентификации:

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

Обратите внимание, что syntax is different если вы используете жрать 3.0 или более ранней версии. Конструктор отличается, и вы должны явно использовать метод send по запросу, чтобы получить ответ:

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

Эта впадина работа, когда я использовал Guzzlev6 и использовал советы от @amenadiel. При использовании завиток, ваш синтаксис будет выглядеть как

локон -u [email protected]: парольhttp://service.com

за кулисами она на самом деле принимает «[email protected] : пароль " бит, base64 кодирует его и отправляет запрос с " Авторизация " Заголовок с кодированным значением. Для этого примера, что будет:

Авторизация: Basic c29tZW9uZUBnbWFpbC5jb206cGFzc3dvcmQ =

Рекомендации @amenadiel приложили "аутентификации: имя пользователя, пароль" заголовок и, следовательно, мой аутентификации хранится сбой. Для достижения этой цели успешно, просто ремесло заголовка, когда вы создание экземпляра запроса клиента жрать, т.е.

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

Это было бы добавить заголовок, как завиток бы, и все, что сервис вы пытаетесь подключиться, перестанут кричать на вас,

Cheers.

7

В дополнение к ответу @amenadiel. Иногда удобно указывать параметры auth в конструкторе:

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

Тогда каждый запрос будет использовать эти параметры по умолчанию по умолчанию.

+3

И для старого '' '' guzzlehttp/guzzle ":" 5.2.0 "' '' вам следует передать '' '['defaults' => [ ' auth '=> [' username ',' password '] ]] '' ' –

2

Согласно тому, что @ bourgeois247 сказал о кодировке base64, следующий работал отлично для меня на жрать 6:

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

Согласно документации жрать, вы можете сделать запрос с базовой авторизации так просто, как это:

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

Примечание: Вам не нужно использовать base64_encode() вообще.

Я проверил и это работает :)

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