PHP Curl을 사용하여 HTTP 인증 수행
이 튜토리얼은 Ubuntu에서 PHP cURL
을 사용하여 HTTP 인증을 수행하는 방법을 보여줍니다.
php-curl
소개
cURL
(클라이언트 URL)은 데이터와 파일을 보내거나 받는 명령줄 유틸리티입니다. URL 구문을 사용하고 FTP, FTPS, DICT, HTTP, HTTPS 등과 같은 프로토콜을 지원합니다.
cURL
라이브러리는 php-curl
이라는 PHP에서 사용할 수 있습니다. 이 라이브러리를 사용하여 PHP에서 HTTP 요청을 보내 서버와 통신할 수 있습니다.
쿠키 설정, 프록시 사용, SSL 연결을 통한 데이터 전달, php-curl
을 사용한 인증과 같은 다양한 작업을 수행할 수 있습니다.
기본 php-curl
기능을 살펴보겠습니다.
-
curl_init()
-cURL
세션을 초기화합니다. -
curl_close()
-cURL
세션을 닫습니다. -
curl_setopt(handle, option, value)
-cURL
세션에 대한 옵션을 설정합니다. 여기서handle
은curl_init()
에 의해 반환된 값입니다.option
매개변수는 다양한 옵션 값을 가질 수 있습니다. 옵션 목록은 여기에서 확인할 수 있습니다.필요에 따라 사용합니다.
value
매개변수에는 옵션에 대한 값이 있습니다. -
curl_exec()
- 미리 정의된cURL
세션을 실행합니다.
Ubuntu에 php-curl
라이브러리 설치
인증을 수행하기 전에 시스템에 php-curl
이 설치되어 있는지 확인해야 합니다. 다음 명령으로 할 수 있습니다.
php -m
이 명령은 컴파일된 PHP 모듈을 나열합니다. 목록에서 curl
을 찾을 수 있으면 php-curl
이 설치된 것입니다.
phpinfo()
함수의 출력을 확인하여 설치를 확인할 수도 있습니다. 설치된 경우 curl
에 대한 테이블이 출력에 나타납니다.
php-curl
이 설치되어 있지 않은 경우 다음 명령을 통해 설치할 수 있습니다.
sudo apt-get install php-curl
설치 후 php.ini
파일을 열고 아래 줄을 찾습니다.
;extension=curl
아래와 같이 위 줄의 주석을 해제합니다.
extension=curl
마지막 단계는 이러한 명령 중 하나를 사용하여 서버를 다시 시작하는 것입니다.
sudo systemctl start apache2
sudo /etc/init.d/apache2 start
HTML 양식에서 기본 HTTP 인증 수행
먼저 HTTP POST
방식만을 사용하여 기본 인증을 수행합니다. 사용자 이름과 비밀번호를 허용하는 HTML 로그인 양식을 생성합니다.
미리 정의된 로그인 자격 증명 집합으로 사용자 입력을 확인합니다. 다음으로 cURL
메소드를 사용하여 HTTP 인증을 수행합니다.
예를 들어 /var/www/html
에 curl
디렉토리를 만든 다음 login.php
파일을 만듭니다. PHP 파일에서 HTML을 사용하여 로그인 양식을 작성하십시오.
아래 예와 같이 사용자 이름과 비밀번호에 대해 name
속성을 uname
및 pass
로 작성합니다.
코드 예:
<form action="login.php" method="post">
<input type="text" placeholder="Enter Username" name="uname" required><br>
<input type="password" placeholder="Enter Password" name="pass" required><br>
<button type="submit" >Login</button>
</form>
다음으로 PHP 태그를 열고 isset()
함수를 사용하여 사용자 이름과 비밀번호가 user123
및 password123
과 같은지 확인합니다. 아래 예와 같이 if
조건을 사용하여 그에 따라 메시지를 표시합니다.
if(isset($_POST['uname'])&& isset($_POST['pass']))
if($_POST['uname']=='user123' && $_POST['pass']=='password123'){
echo "login successful";
}
else{
echo "login failed";
}
이제 서버에서 파일을 열고 다음과 같이 로그인 자격 증명을 입력합니다.
username=user123
password=password123
출력:
아래와 같이 요소 검사
옵션의 네트워크
탭에서 HTTP 요청을 확인할 수 있습니다.
양식에 잘못된 자격 증명을 제출하여 로그인 실패
메시지를 표시하여 인증을 테스트할 수 있습니다. 위의 그림과 같이 요청
탭에서도 잘못된 자격 증명을 볼 수 있습니다.
cURL
을 사용하여 기본 HTTP 인증 수행
위에 나열된 cURL
방법을 사용하여 HTTP 인증을 수행할 수 있습니다. 먼저 서버에 HTTP 요청을 보낼 페이로드를 생성해야 합니다.
예를 들어 curl
디렉토리 안에 post.php
파일을 만듭니다. 아래와 같이 PHP 파일에서 $data
배열을 만들고 올바른 로그인 자격 증명을 저장합니다.
$data = array(
"uname" => "user123",
"pass" => "password123",
"form" => "submit"
);
다음으로 cURL
세션을 저장할 변수 ch
를 만듭니다. http://localhost/curl/login.php
URL이 있는 curl_init()
함수를 ch
에 할당합니다.
그런 다음 curl_setopt()
함수를 사용하여 cURL
세션에 대한 다양한 옵션을 설정합니다. CURLOPT_FOLLOWLOCATION
, CURLOPT_POST
및 CURLOPT_RETURNTRANSFER
를 TRUE
로 설정합니다.
CURLOPT_POSTFIELDS
옵션에 페이로드 $data
를 제공하십시오. CURLOPT_COOKIEJAR
옵션의 경우 쿠키 파일 이름 cookie.txt
를 작성합니다.
프로젝트 디렉터리에 쿠키를 저장하려면 빈 cookie.txt
파일을 만들어야 합니다.
http://localhost/curl/login.php
는cURL
과 함께 요청을 보내는 대상 URL입니다.TRUE
로 설정된CURLOPT_FOLLOWLOCATION
옵션은Location: header()
에 의해 리디렉션되는 모든 헤더 위치를 따릅니다.CURLOPT_POST
옵션이TRUE
로 설정되면 서버에 대한POST
요청임을 세션에 알립니다.CURLOPT_POSTFIELDS
옵션은 요청에서 보낸 페이로드를 정의합니다.CURLOPT_COOKIEJAR
옵션은cURL
세션이 닫힌 후cookie.txt
파일에 쿠키를 저장합니다.CURLOPT_RETURNTRANSFER
옵션을TRUE
로 설정하면 직접 입력하는 대신curl_exec()
의 응답을 반환합니다.
마지막으로 ch
를 매개변수로 사용하여 cURL
세션을 실행하고 curl_close()
로 세션을 종료하는 curl_exec()
함수를 작성합니다. 마지막으로 출력 curl_exec()
함수를 표시합니다.
코드 예:
$ch = curl_init('http://localhost/curl/login.php');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
그런 다음 post.php
스크립트를 실행합니다. 자격 증명이 페이로드에서 정확하므로 다음 출력이 수신됩니다.
잘못된 자격 증명을 사용하면 출력에 로그인 실패
라고 표시됩니다.
따라서 이 튜토리얼에서는 PHP에서 기본적인 cURL
인증을 수행하는 방법을 보여주었습니다.
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn