REST에 한발짝, CURL로 데이터 요청하기

2019년 05월 21일
타 서비스에서 제공하는 REST API 등을 사용하는 방법이 있겠지만 그 중에서 curl 방법을 소개하려 한다.
테스트할 경로는 https://api.androidhive.info/contacts/로 요청시 연락처 정보가 담긴 샘플 JSON을 반환해준다.
 
우선 GET 방식으로 curl을 보낼 때의 예제이다.
 
<?php // CURL 경로 $url = 'https://api.androidhive.info/contacts/'; // GET으로 보낼 데이터 $data = [ 'name' => 'ian', ]; // 만약 보낼 데이터가 있다면 if (!empty($data)) { // CURL 주소에 GET Parameter 추가 $url .= '?'.http_build_query($data); } $handle = curl_init(); // CURL 객체 할당 curl_setopt($handle, CURLOPT_URL, $url); // CURL 경로 지정 curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); // CURL 응답을 문자로 변환하여 받음 curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 10); // CURL 타임아웃(제한시간) $response = curl_exec($handle); // CURL 요청 curl_close($handle); // CURL 객체 제거 var_dump($response);
 
아래는 POST 방식을 이용한 curl 요청 예제이다.
 
<?php // CURL 경로 $url = 'https://api.androidhive.info/contacts/'; // POST로 보낼 데이터 $data = [ 'name' => 'ian', ]; $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); curl_setopt($handle, CURLOPT_POST, true); // 요청을 POST로 할 것인가? curl_setopt($handle, CURLOPT_POSTFIELDS, $data); // 함께 전달할 데이터 입력 curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 10); $response = curl_exec($handle); curl_close($handle); var_dump($response);
 
위 처럼 GET과 크게 다를 것 없이 간단하게 curl 요청을 전송할 수 있다.
예제를 이용하여 간단한 함수를 만들어보자.
 
function requestCURL($requestType, $url, $data = [], $timeout = 10) { if (strtolower($requestType) === 'get') { $url = $url.'?'.http_build_query($data); } $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); if (strtolower($requestType) === 'post') { curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_POSTFIELDS, $data); } curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, $timeout); $response = curl_exec($handle); curl_close($handle); return $response; } $data = [ 'name' => 'ian', ]; var_dump(requestCURL('POST', 'https://api.androidhive.info/contacts/', $data));