Guzzle을 사용한HTTP 기본 인증은 어떻게 하나요?
저는 Guzle을 이용한 기본접속 인증을 하고 싶고 프로그래밍은 매우 초보입니다.어떻게 해야 할지 모르겠어요.컬을 이용해서 하려고 했는데 제 주변환경은 꿀꺽꿀꺽 해야 돼요.
Guzle 5.0 이후를 사용하는 경우 기본 인증은 auth 파라미터를 사용하여 지정된다고 합니다.
$client = new GuzzleHttp\Client();
$response = $client->get('http://www.server.com/endpoint', [
'auth' => [
'username',
'password'
]
]);
Guzle 3.0 이전 버전을 사용하는 경우 구문이 다릅니다.컨스트럭터가 다르므로 명시적으로 다음 명령어를 사용해야 합니다.send
응답을 얻기 위한 요청 메서드:
$client = new Guzzle\Http\Client();
$request = $client->get('http://www.server.com/endpoint');
$request->setAuth('username', 'password');
$response = $request->send();
간단한 부록
@Mathwew-Knill에 대한 응답으로 기본 허가를 설정하여 Guzzle이 추가 요청마다 이를 암묵적으로 전송하도록 할 수 있습니다.@닉의 대답은 적중했다.클라이언트 컨스트럭터는 생각할 수 있는 모든 파라미터와 몇 가지 파라미터를 취합니다.
또 다른 접근법은 창의성을 얻고자 하는 경우 클라이언트가 기본 헤더를 전달하는 것을 인스턴스화하여 추가 요청 시 전송할 수 있습니다.단순한 인증은 결국,Authorization
header를 클릭합니다.다음과 같이 계산됩니다.
$client = new Client([
'headers'=>[
'Authorization'=> Basic base64_encode(<username>:<password>)
]
]);
마지막으로 간단한 인증 대화상자 채우기는 한 번만 이루어집니다(특정 세션의 첫 번째 방문 시).이것은 보통 방문자의 브라우저에서 쿠키를 설정함으로써 이루어집니다.이 쿠키에는 서버가 일치하는 활성 세션을 식별하기에 충분한 정보가 포함되어 있습니다.
일반적으로 Guzzle 요청은 스테이트리스입니다만, 디버깅 목적으로 요청 또는 응답을 수정하고 이 사용 예에서는 쿠키를 기억하도록 Guzzle을 미들웨어 체인으로 설정할 수 있습니다.이 때문에, 부분적으로 스테이트 풀 상태가 됩니다.
자세한 절차는 Guzzle Docs에서 확인하시기 바랍니다.중요한 것은 cookiejar 미들웨어를 사용하여 클라이언트를 인스턴스화함으로써 그 이후 클라이언트에 포함시킴으로써 첫 번째 요구는 서버의 정보를 기억하게 된다는 것입니다.set-cookie
header를 지정하면, 한층 더 송신됩니다.cookie
서버가 클라이언트를 로그인 사용자로 인식합니다.물론 첫 번째 응답의 헤더를 직접 검사하고 그 이후 값을 전송할 수도 있습니다.
다른 방법도 있겠지만, 지금은 다른 방법이 생각나지 않아요.
@amenadiel의 답변 외에.경우에 따라서는 컨스트럭터에서 auth 파라미터를 쉽게 지정할 수 있습니다.
$client = new Client([
'auth' => ['username', 'password'],
]);
그러면 모든 요구는 이 기본 인증 파라미터를 사용합니다.
Guzzlev6를 사용하고, @amenadiel의 어드바이스를 사용했을 때, 이 Dint가 동작했습니다.컬을 사용하면 구문은 다음과 같습니다.
curl - u someone@gmail.com : 비밀번호 http://service.com
base64는 실제로 "someone@gmail.com:password" 비트를 사용하여 인코딩하고 인코딩된 값과 함께 "Authorization" 헤더를 사용하여 요청을 전송합니다.이 예에서는 다음과 같습니다.
인증:기본 c29tZW9uZUBnbWFPBC5jb206cGZc3dvcmQ=
@amenadiel로부터의 조언에 의해 "auth:username, password" 헤더가 추가되어 인증이 계속 실패하였습니다.이를 성공시키려면 Guzzle Client 요청을 인스턴스화할 때 헤더를 작성하기만 하면 됩니다.
$client = new GuzzleHttp\Client();
$credentials = base64_encode('someone@gmail.com:password');
$response = $client->get('http://www.server.com/endpoint', [
'Authorization' => ['Basic '.$credentials]
]);
그러면 머리글이 컬처럼 추가되고 연결하려는 서비스가 중지됩니다.
건배.
Guzle 6 설명서에 따르면 다음과 같이 기본 권한으로 요청을 수행할 수 있습니다.
$client = new Client();
$response = $client->request(
'POST', /*instead of POST, you can use GET, PUT, DELETE, etc*/
$url,
[
'auth' => ['username', 'password'] /*if you don't need to use a password, just leave it null*/
]
);
echo $response->getBody();
메모: base64_encode()는 요청 전에 이미 사용하기 때문에 사용할 필요가 없습니다.
테스트를 해봤는데 동작합니다.
$response = $client->request( 'GET', 'your_url', [
'auth' => [
'your_username',
'your_password'
],
'headers' => [
'if you want to pass something in the headers'
]
]
);
클라이언트를 인스턴스화할 때 각 요구에 추가하는 대신 인증 파라미터를 설정할 수도 있습니다.
$this->client = new \GuzzleHttp\Client([
'base_uri' => $this->endpoint,
'headers' => [
'Authorization' => ['Basic'.base64_encode($this->username.':'.$this->password)],
],
]);
다음은 Guzle 6의 다양한 문서 링크입니다.
base64 인코딩에 대해 @bourgeoze247이 말한 바에 따르면, Guzzle 6에서는 다음과 같은 것이 완벽하게 동작했습니다.
$client = new Client();
$credentials = base64_encode('username:password');
$response = $client->post('url',
[
'headers' => [
'Authorization' => 'Basic ' . $credentials,
],
]);
symfony와 함께 사용하는 경우 구성 파일(symfony4의 경우 config/packages/eight_points_guzle.yaml, 다른 버전의 경우 flex 또는 config.yml)에도 정의할 수 있습니다.
컨피규레이션파일:
eight_points_guzzle:
clients:
your_service:
# Write here the host where to do requests
base_url: "yourURL"
options:
timeout: 30
auth:
- yourLogin # login
- yourPassword # password
plugin: ~
그 후 서비스, 컨트롤러 등에서는...
$client = $this->getContainer()->get('eight_points_guzzle.client.your_service');
$response = $client->get('yourRoute');
참조: https://packagist.org/packages/eightpoints/guzzle-bundle
$client = new Client();
$response = Http::withBasicAuth($username,$password)
->post($url);
언급URL : https://stackoverflow.com/questions/30970736/how-do-i-do-http-basic-authentication-using-guzzle
'programing' 카테고리의 다른 글
Java에서 SIGKILL 신호를 정상적으로 처리하는 방법 (0) | 2022.09.25 |
---|---|
Python 함수 전역 변수? (0) | 2022.09.25 |
시간(밀리초 단위) C (0) | 2022.09.14 |
문자열에서 LocalDate로 (0) | 2022.09.14 |
다른 컴포넌트의 Vue 단일 컴포넌트에서 데이터를 가져오시겠습니까? (0) | 2022.09.13 |