<./>.dev./hood

 

대부분 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