테스트 사이트 - 개발 중인 베타 버전입니다

PHP에서 API 사용할때 질문입니다 채택완료

와우대감 2년 전 조회 2,073

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

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

 

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

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

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

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

 

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

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

 

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

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

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

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

 

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

 

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

 

</p>

<p>$_apikey = "인증받은 API키(원래는 값이 있음)";</p>

<p> </p>

<p>    $_si = "서울특별시";</p>

<p>    $_gu = "중랑구";</p>

<p>    $_dong = "망우동";</p>

<p>    $_bunji = "386-1";</p>

<p>    $_f_addr = $_si." ".$_gu." ".$_dong." ".$_bunji;</p>

<p> </p>

<p>    $url = "<a href="http://api.vworld.kr/req/search";" target="_blank" rel="noopener noreferrer">http://api.vworld.kr/req/search";</a></p>

<p> </p>

<p>    $queryParams = "?request=search";</p>

<p>    //$queryParams .= "&service=search";</p>

<p>    //$queryParams .= "&version=2.0";</p>

<p>    $queryParams .= "&query=".$_f_addr;</p>

<p>    $queryParams .= "&type=address";</p>

<p>    $queryParams .= "&category=PARCEL";</p>

<p>    $queryParams .= "&format=xml";</p>

<p>    $queryParams .= "&errorFormat=xml";</p>

<p>    $queryParams .= "&key=".$_apikey;</p>

<p> </p>

<p>    $furl = $url . $queryParams;</p>

<p> </p>

<p>    echo "full url : ".$furl."

";</p>

<p> </p>

<p>    //reqGet("",$furl);</p>

<p> </p>

<p>    $curl = curl_init();</p>

<p>    // 3. cURL 옵션 설정</p>

<p>    curl_setopt($curl, CURLOPT_URL, $furl);    </p>

<p>    //curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: Application/json;charset:utf-8'));</p>

<p>    //curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml;charset:utf-8'));</p>

<p>    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    </p>

<p>    //curl_setopt($curl, CURLOPT_HEADER, TRUE);    </p>

<p>    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');    </p>

<p> </p>

<p>    // 4. cURL 실행</p>

<p>    $response = curl_exec($curl);</p>

<p> </p>

<p>    // 5. 결과 처리 및 해제</p>

<p>    if ($response === false) {</p>

<p>        $error = curl_error($curl);</p>

<p>        //echo "cURL Error: " . $error;</p>

<p>    } else {</p>

<p>        echo "response : ".$response."

";</p>

<p>        //$requestData = file_get_contents('php://input');</p>

<p>        $rsp_json_en = json_encode($response, JSON_UNESCAPED_UNICODE);</p>

<p>        $rst_json_de = json_decode($response, true);</p>

<p> </p>

<p>        echo "rsp_json_en : ".$rsp_json_en."

";</p>

<p>        echo "rst_json_de : ".$rst_json_de;</p>

<p> </p>

<p>    }</p>

<p>    curl_close($curl);</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
e
2년 전

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

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

curl_setopt($curlsession, CURLOPT_POSTFIELDS, $queryParams);

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

와우대감
2년 전
엥? GET으로 넘길때도 CURLOPT_POSTFIELDS 가 필요한거에요?
URL에 파라미터를 포함하고있어도 파라미터 정보를 같이 보내는건가요?

한번 해볼께요~~
e
eyekiss
2년 전
post 로 넘겨보세요..
와우대감
2년 전
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
결과는 똑같아요.

혹시 $queryParams 값 형태가 json처럼 Object 거나 배열 형태로 해서 넘겨야하는건 아니죠?
지금은 &type=address&category=PARCEL&format=xml&errorFormat=xml&key= 이런형태라
와우대감
2년 전
아.....된것같습니다.
URL을 API URL만 넣고 파라미터를 CURLOPT_POSTFIELDS 에 말씀하신것처럼 하고
POST로 하니 화면엔 출력이 안되지만
개발자콘솔에서 엘리먼트 화면에 XML 태그가 출력이 됐네요.

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

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인