cURL header 에 API Key 실어 보내기
대부분 API 데이터 전송이라 함은 API Key 를 이용한 1:1 데이터 전송을 말한다
Api Key 는 누출이 되면 안되는 중요한 값으로 유출에 위험성이 있는 POST 및 GET으로는 전송하지 않는다.
CURL의 Header 값을 통해 POST 및 GET 보다는 좀더 안전한 방법으로 Api key 를 체크하여 통신을 진행해보자.
https://www.aaa.com 이라는 사이트에서 https://www.bbb.com 이라는 사이트의 데이터를 받아온다고 가정하자
이하 설명을 위해 도메인은 생략 aaa. bbb로 얘기하겠다.
aaa 사이트의 result.php 페이지에서 curl 통신을 통해 bbb 사이트에서 미리 발급 받은 api key를 header 로 담아 전송을 시도한다.
# 데이터를 받아올 페이지
# https://www.aaa.com/result.php
<?php
$url = "call.php";
$headers = [
"apikey: abc123!@#$%"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec ($ch);
curl_close ($ch);
echo $response;
?>
aaa 사이트의 result.php 페이지는 bbb 사이트의 call.php 페이지를 접근하여, api key를 체크한다.
bbb 사이트는 aaa 사이트에서 curl 통신을 통해 넘겨져온 header 에 담긴 api key 값을 를 체크 후 정상적인 key 라면 데이터를 제공하고, 정상적이지 않다면 페이지가 없다는 404 에러를 리턴한다.
# 데이터를 제공할 페이지
# https://www.bbb.com/call.php
<?php
$apiKey = "abc123!@#$%"; // 미리 발급되어 체크할 Apikey
$headers = apache_request_headers();
if($headers['Apikey'] != $apiKey){
exit(header('HTTP/1.1 404 Not Found')); // apikey 체크 후 맞지 않으면 페이지 404 처리
}
# Apikey 체크 후 문제가 없으면 데이터 제공
echo "OK!!";
?>
생각보다 간단한 방법이지만, 보안이나 좀 더 복잡한 전송은 좀 더 공부가 필요하다.
출처: https://dotiweb.tistory.com/entry/PHP-CURL을-이용한-API-데이터-전송 [DOTI Project:티스토리]
'Server Side > PHP' 카테고리의 다른 글
php 세션 class (0) | 2023.12.11 |
---|---|
숫자를 한글로 (0) | 2023.12.01 |
[CodeIgniter] URL 규칙과 URI 가져오기 (0) | 2023.10.29 |
Geolocation으로 현재 위치 구하기 (PHP) (0) | 2023.10.02 |
mysql connection pool 세팅 (0) | 2020.02.16 |