PHP에서 API 사용할때 질문입니다

PHP에서 API 사용할때 질문입니다

QA

PHP에서 API 사용할때 질문입니다

본문

자바스크립트단에서 Ajax로 API 호출해서 성공했던 부분인데

PHP로 호출해야만하는 상황이라 PHP에서 curl 로 했습니다.

 

아래 코드처럼해서 테스트를 진행했는데

$response 에 값이 일반적인 출력값이 아닌

API를 제공한 사이트의 오류페이지에대한 html 태그로

값이 넘어오는것같습니다.

 

아마도 404에러에대한 없는페이지 태그들을 넘겨주는거같은데

(실제로 404에러를 어디선가 보긴한거같은데 어떻게 확인했는지는 기억이 안납니다...)

 

그런데 모든 파라미터를 포함한 URL값인

$furl 변수를 출력해서 출력된 전체링크를 복사해서 주소창에 넣으면

정상적인 XML 값이 출력됩니다.

URL 파라메터 값들이 잘못된건 아닌거같은데....

 

이게....왜 이런걸까요?....

 

API제공은 브이월드 입니다.

 


$_apikey = "인증받은 API키(원래는 값이 있음)";
 
    $_si = "서울특별시";
    $_gu = "중랑구";
    $_dong = "망우동";
    $_bunji = "386-1";
    $_f_addr = $_si." ".$_gu." ".$_dong." ".$_bunji;
 
    $url = "http://api.vworld.kr/req/search";
 
    $queryParams = "?request=search";
    //$queryParams .= "&service=search";
    //$queryParams .= "&version=2.0";
    $queryParams .= "&query=".$_f_addr;
    $queryParams .= "&type=address";
    $queryParams .= "&category=PARCEL";
    $queryParams .= "&format=xml";
    $queryParams .= "&errorFormat=xml";
    $queryParams .= "&key=".$_apikey;
 
    $furl = $url . $queryParams;
 
    echo "full url : ".$furl."<br><br>";
 
    //reqGet("",$furl);
 
    $curl = curl_init();
    // 3. cURL 옵션 설정
    curl_setopt($curl, CURLOPT_URL, $furl);    
    //curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: Application/json;charset:utf-8'));
    //curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml;charset:utf-8'));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    
    //curl_setopt($curl, CURLOPT_HEADER, TRUE);    
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');    
 
    // 4. cURL 실행
    $response = curl_exec($curl);
 
    // 5. 결과 처리 및 해제
    if ($response === false) {
        $error = curl_error($curl);
        //echo "cURL Error: " . $error;
    } else {
        echo "response : ".$response."<br><br>";
        //$requestData = file_get_contents('php://input');
        $rsp_json_en = json_encode($response, JSON_UNESCAPED_UNICODE);
        $rst_json_de = json_decode($response, true);
 
        echo "rsp_json_en : ".$rsp_json_en."<br><br>";
        echo "rst_json_de : ".$rst_json_de;
 
    }
    curl_close($curl);

이 질문에 댓글 쓰기 :

답변 1

데이터를 넘기는 부분이 빠진것 같네요??

아래 부분을 추가해보세요..

curl_setopt($curlsession, CURLOPT_POSTFIELDS, $queryParams);

 

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
결과는 똑같아요.

혹시 $queryParams 값 형태가 json처럼 Object 거나 배열 형태로 해서 넘겨야하는건 아니죠?
지금은 &type=address&category=PARCEL&format=xml&errorFormat=xml&key= 이런형태라

아.....된것같습니다.
URL을 API URL만 넣고 파라미터를 CURLOPT_POSTFIELDS 에 말씀하신것처럼 하고
POST로 하니 화면엔 출력이 안되지만
개발자콘솔에서 엘리먼트 화면에 XML 태그가 출력이 됐네요.

파싱만하면 될것같습니다.
감사합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 58
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT