curl ( 저는 컬이라고 부르긴 합니다. 가끔 씨 유알엘 이라고도 하고요.)는 Client Url의 약자로 클라이언트 측에서 다양한 프로토콜을 이용해 데이터를 전송하고 받을 수 있는 라이브러리라고 생각하시면 될 것 같습니다.
요즘은 API 호출이나 페이지 파싱할때 많이 사용하는데 curl를 이용해서 json 데이터 주고받기를 샘플로 만들어봤습니다.
1. cUrl 공통 클래스 제작
CommonCall 이라는 공통 클래스를 이용해서 어디서든지 호출할 수 있도록 작업을 했습니다. selectMode라는 메서드를 이용해서 파라미터 별로 주소를 다르게 해서 호출하게 했습니다. 호출 url도 다양하게 나누어서 사용해도 될 것으로 보입니다. call 메서드의 $postData는 array 형입니다.
<?php
/**
* 공통 API 호출 클래스
* @author Sari
* @date 2019.11.05
*/
class CommonCall {
private $serverUrl; // 호출Url
private $actionUrl; // 실작업Url
/**
* 생성자
*/
public function __construct(){
$this->serverUrl = "서버주소";
}
/**
* 공통서비스 Call을 하는 부분
* @param $mode
* @param $postData
* @param $functionName
* @return
*/
public function call($mode , $postData = null, $functionName = "") {
$this->selectMode($mode);
$postData = json_encode($postData);
$headers = array(
"Content-Type: application/json;"
, "Content-Length: ".strlen($postData).""
,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->serverUrl . $this->actionUrl);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode(urldecode($response));
return $result;
}
private function selectMode($mode){
switch ($mode) {
case "save":
$this->actionUrl = "/save.php";
break;
case "use":
$this->actionUrl = "/use.php";
break;
case "create":
$this->actionUrl = "/create.php";
break;
case "show":
$this->actionUrl = "/show.php";
break;
default:
break;
}
}
}
굳이 이렇게 안하시고 call 메서드 안에 있는 curl 부분만 복사해서 작업하셔도 무방합니다.
2. curl 호출하기
저는 클래스로 따로 만들었기때문에 해당 객체를 생성 후 데이터를 조립해 호출을 하는 방법으로 진행했습니다.
<?php
include_once $_SERVER["DOCUMENT_ROOT"]."/_class/common/CommonCall.class.php";
$commonCall = new CommonCall();
$requestData["a"] = "a";
$requestData["b"] = "b";
$resultArray = $commonCall->call("show", $requestData, "show");
3. json 데이타 받기
호출당하는 서버에서는 아래와 같이 json 데이터를 받을 수 있습니다. 작업을 진행 후 똑같이 json_encode 함수를 이용해 출력해주면 호출한 서버에서 해당 자료를 받을 수 있습니다.
<?php
$requestData = file_get_contents('php://input');
$requestData = json_decode($requestData, true);
// --- 작업 전
...
...
// --- 작업 후
echo json_encode($result);