Я хочу сделать базовую аутентификацию доступа с помощью Guzzle, и я очень новичок в программировании. я понятия не имею, что делать. Я попытался сделать это, используя curl, но моя среда требует использования жужжания.
Как сделать базовую аутентификацию HTTP с помощью Guzzle?
Ответ 1
Если вы используете Guzzle 5.0 или новее, документы, скажите, что базовый auth указан с использованием параметра auth:
$client = new GuzzleHttp\Client();
$response = $client->get('http://www.server.com/endpoint', [
'auth' => [
'username',
'password'
]
]);
Обратите внимание, что синтаксис отличается, если вы используете Guzzle 3.0 или ранее. Конструктор отличается, и вам также необходимо явно использовать метод send
для запроса, чтобы получить ответ:
$client = new Guzzle\Http\Client();
$request = $client->get('http://www.server.com/endpoint');
$request->setAuth('username', 'password');
$response = $request->send();
Ответ 2
Этот трюк работает, когда я использовал Guzzlev6 и использовал совет от @amenadiel. Когда вы используете завиток, ваш синтаксис будет выглядеть примерно так:
curl -u [email protected]: пароль http://service.com
за кулисами он фактически принимает бит "[email protected]: пароль" , base64 кодирует его и отправляет запрос с заголовком "Авторизация" с закодированное значение. В этом примере это будет:
Авторизация: базовый c29tZW9uZUBnbWFpbC5jb206cGFzc3dvcmQ =
Совет от @amenadiel добавил заголовок "auth: username, password" и, следовательно, моя аутентификация продолжала сбой. Чтобы добиться этого, просто создайте заголовок, когда вы создаете запрос клиента Guzzle, т.е.
$client = new GuzzleHttp\Client();
$credentials = base64_encode('[email protected]:password');
$response = $client->get('http://www.server.com/endpoint', [
'Authorization' => ['Basic '.$credentials]
]);
Это добавит заголовок как завиток, и любая служба, с которой вы пытаетесь подключиться, перестанет кричать на вас,
Приветствия.
Ответ 3
В дополнение к ответу @amenadiel. Иногда удобно указывать параметры auth в конструкторе:
$client = new Client([
'auth' => ['username', 'password'],
]);
Затем каждый запрос будет использовать эти параметры auth по умолчанию.
Ответ 4
$response = $client->request( 'GET', 'your_url', [
'auth' => [
'your_username',
'your_password'
],
'headers' => [
'if you want to pass something in the headers'
]
]
);
Ответ 5
В соответствии с тем, что @буржуазное247 говорит о кодировке base64, для меня было отлично работать на Guzzle 6:
$client = new Client();
$credentials = base64_encode('username:password');
$response = $client->post('url',
[
'headers' => [
'Authorization' => 'Basic ' . $credentials,
],
]);
Ответ 6
В соответствии с документацией Guzzle вы можете сделать запрос с базовой авторизацией так же просто, как это:
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().
Я тестировал и работает:)