Подтвердить что ты не робот

Как сделать базовую аутентификацию HTTP с помощью Guzzle?

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

4b9b3361

Ответ 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().

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