programing

Guzzle을 사용한HTTP 기본 인증은 어떻게 하나요?

copyandpastes 2022. 9. 25. 21:26
반응형

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이 추가 요청마다 이를 암묵적으로 전송하도록 할 수 있습니다.@닉의 대답은 적중했다.클라이언트 컨스트럭터는 생각할 수 있는 모든 파라미터와 몇 가지 파라미터를 취합니다.

또 다른 접근법은 창의성을 얻고자 하는 경우 클라이언트가 기본 헤더를 전달하는 것을 인스턴스화하여 추가 요청 시 전송할 수 있습니다.단순한 인증은 결국,Authorizationheader를 클릭합니다.다음과 같이 계산됩니다.

$client = new Client([
  'headers'=>[
       'Authorization'=> Basic base64_encode(<username>:<password>)
   ]
 ]);

마지막으로 간단한 인증 대화상자 채우기는 한 번만 이루어집니다(특정 세션의 첫 번째 방문 시).이것은 보통 방문자의 브라우저에서 쿠키를 설정함으로써 이루어집니다.이 쿠키에는 서버가 일치하는 활성 세션을 식별하기에 충분한 정보가 포함되어 있습니다.

일반적으로 Guzzle 요청은 스테이트리스입니다만, 디버깅 목적으로 요청 또는 응답을 수정하고 이 사용 예에서는 쿠키를 기억하도록 Guzzle을 미들웨어 체인으로 설정할 수 있습니다.이 때문에, 부분적으로 스테이트 풀 상태가 됩니다.

자세한 절차는 Guzzle Docs에서 확인하시기 바랍니다.중요한 것은 cookiejar 미들웨어를 사용하여 클라이언트를 인스턴스화함으로써 그 이후 클라이언트에 포함시킴으로써 첫 번째 요구는 서버의 정보를 기억하게 된다는 것입니다.set-cookieheader를 지정하면, 한층 더 송신됩니다.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()는 요청 전에 이미 사용하기 때문에 사용할 필요가 없습니다.

테스트를 해봤는데 동작합니다.

자세한 내용은 Guzle 6 매뉴얼을 참조하십시오.

$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

반응형