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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
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 태그가 출력이 됐네요.

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

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

회원로그인

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