본문 바로가기
프로그래밍/JavaScript

CORS 문제 php로 해결

by 정빈e 2022. 3. 23.
728x90

공공데이터로 API를 사용할 때 자주 CORS 문제에 마주했었다.

개발하는 도중 CORS 문제가 생겼을 때는 로컬 환경에서 두 가지 방법으로 해결해서 데이터를 확인했다.

 

1.

첫 번째는 https://cors-anywhere.herokuapp.com/corsdemo 이곳에서 request 버튼을 클릭하여 요청하고 불러오고자 하는 URL 앞에  "https://cors-anywhere.herokuapp.com/" 를 붙여주었다.

 

2.

두 번째는 확장앱을 사용했다. 브라우저에 확장앱을 추가하고 Allow CORS를 해주면 된다.

 

하지만 이 두가지는 로컬 환경에서 해결해줄 뿐이고 내 도메인에 업로드할 경우엔 여지없이 막히는 문제가 있었다.

 

3.

이 경우에는 api를 php로 받아와서 js에서 php를 불렀더니 잘 불러와진다. 

 

let requestOptions = {
  method: "GET",
  redirect: "follow",
};

fetch("test2.php", requestOptions)
  .then((response) => response.json())
  .then((result) => console.log(result))
  .catch((error) => console.log("error", error));

 

<?php
$cPage = $_GET['cPage'];
$shapeRealm = $_GET['shapeRealm'];
echo callAPI("GET","http://www.culture.go.kr/openapi/rest/koreanpattern/individualizations/2d?serviceKey=PF9LAJQoopohm%2Bi%2BBlO%2FJn7Lf6nT2aorMXAUsPRVsjlLEfwFmcOF4PHdCylgveVUWm8hAvKR1qC0Z7jVJ4IqYg%3D%3D&cPage=".$cPage."&shapeRealm=".$shapeRealm);

// Method: POST, PUT, GET etc
// Data: array("param" => "value") ==> index.php?param=value

function callAPI($method, $url, $data = false)
{
    $curl = curl_init();
    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);
            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Optional Authentication:
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
}

?>

문제가 생겼을 때 어찌어찌 해결하면 다음에 또 생각이 안 나서 정리해봤다.

728x90

'프로그래밍 > JavaScript' 카테고리의 다른 글

[Javascript] forEach()  (0) 2021.07.31
[Javascript] 삼항 연산자  (0) 2021.07.22

댓글