Я хочу сделать базовую аутентификацию доступа с помощью Guzzle, и я очень новичок в программировании. я понятия не имею, что делать. Я попытался сделать это, используя curl, но моя среда требует использования жужжания.Как сделать базовую аутентификацию HTTP с помощью Guzzle?
ответ
Если вы используете жрать 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();
Эта впадина работа, когда я использовал 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.
В дополнение к ответу @amenadiel. Иногда удобно указывать параметры auth в конструкторе:
$client = new Client([
'auth' => ['username', 'password'],
]);
Тогда каждый запрос будет использовать эти параметры по умолчанию по умолчанию.
И для старого '' '' guzzlehttp/guzzle ":" 5.2.0 "' '' вам следует передать '' '['defaults' => [ ' auth '=> [' username ',' password '] ]] '' ' –
Согласно тому, что @ bourgeois247 сказал о кодировке base64, следующий работал отлично для меня на жрать 6:
$client = new Client();
$credentials = base64_encode('username:password');
$response = $client->post('url',
[
'headers' => [
'Authorization' => 'Basic ' . $credentials,
],
]);
Согласно документации жрать, вы можете сделать запрос с базовой авторизации так просто, как это:
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() вообще.
Я проверил и это работает :)
$response = $client->request('GET', 'your_url', [
'auth' => [
'your_username',
'your_password'
],
'headers' => [
'if you want to pass something in the headers'
]
]
);
Вы действительно должны попробовать и вставить любой код, вы пытались повысить свои шансы на получение значимого ответа. Просто заявляя о своей потребности и неясности, вы просто получите вниз :( – amenadiel