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 포인트
2년 전
데이터를 넘기는 부분이 빠진것 같네요??
아래 부분을 추가해보세요..
curl_setopt($curlsession, CURLOPT_POSTFIELDS, $queryParams);
로그인 후 평가할 수 있습니다
답변에 대한 댓글 4개
�
와우대감
2년 전
e
eyekiss
2년 전
post 로 넘겨보세요..
�
와우대감
2년 전
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
결과는 똑같아요.
혹시 $queryParams 값 형태가 json처럼 Object 거나 배열 형태로 해서 넘겨야하는건 아니죠?
지금은 &type=address&category=PARCEL&format=xml&errorFormat=xml&key= 이런형태라
결과는 똑같아요.
혹시 $queryParams 값 형태가 json처럼 Object 거나 배열 형태로 해서 넘겨야하는건 아니죠?
지금은 &type=address&category=PARCEL&format=xml&errorFormat=xml&key= 이런형태라
�
와우대감
2년 전
아.....된것같습니다.
URL을 API URL만 넣고 파라미터를 CURLOPT_POSTFIELDS 에 말씀하신것처럼 하고
POST로 하니 화면엔 출력이 안되지만
개발자콘솔에서 엘리먼트 화면에 XML 태그가 출력이 됐네요.
파싱만하면 될것같습니다.
감사합니다.
URL을 API URL만 넣고 파라미터를 CURLOPT_POSTFIELDS 에 말씀하신것처럼 하고
POST로 하니 화면엔 출력이 안되지만
개발자콘솔에서 엘리먼트 화면에 XML 태그가 출력이 됐네요.
파싱만하면 될것같습니다.
감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
URL에 파라미터를 포함하고있어도 파라미터 정보를 같이 보내는건가요?
한번 해볼께요~~