낚시를 다니다보니 바다날씨 실시간 조황 정보가 필요해서 해양수산부 바다누리 해양정보 서비스를 통해 바다 날씨와 조위 관측 자료를 API로 받아서 개인적으로 사용하고 있었다.
나중에 앱으로 개발하리란 생각을 하면서 PHP로 일단 짜서 개인용 호스팅서버에 넣고 휴대폰 조회용으로 사용하고 있었다.
어느날 부터 작동이 안되는걸 확인했고, 차일피일 미루다 원인 분석을 시작했다.
일단 오류는 HTTP request failed! 이다. 서버가 답을 안내놓고 있다고 생각하고 서버 주인부터 찾아갔다.
우선 해양수산부 바다누리 해양정보 서비스 API쪽 확인결과 지난번과 매뉴얼이 바뀌거나 하지는 않은 듯하다.
그리고 혹시나 하는 마음에 api 호출 주소를 직접 브라우져에서 호출해 봤다. 정상적으로 데이터가 추출된다.
그런데 왜 내가 만든 페이지에서는 동작하지 않을까...
해당 홈페이지 공지사항을 뒤져보다보니, 이거다 싶은 내용이 있었다.
관련 내용은 찾았는데 어찌 해결해야하나 싶어서 이리저리 검색하다보니...
php함수중 file_get_contents를 이용하고 있었는데, 이 함수는 브라우저 정보를 송신하지 않기때문에 브라우저 정보를 요청하는 api서버에서 데이터 제공을 거부한다라고 판단할 수 있었다.
(결론적으론 이 정보와 판단이 착오였다.)
이제 해결책은 file_get_contents이외의 방법으로 데이터를 긁어와야하는데... 나로서는 아는 방법이 그것뿐이었다.
다시 검색...
대부분 선구자들은 http_get()을 활용하란다. 시도해보니 undefined function으로 나온다.
php.ini에서 http_get을 extension하란다. 내 테스트 서버는 될것 같다.
하지만 사용하는 호스팅업체까지 변경시킬 수 있을지 의문이 들었다. 일단 이 방법 PASS~!
다시 검색...
몇몇 블로거가 추천하는 curl을 사용하는 방법 확인.
변수명까지 똑같이 지정해놓은 분들이 많다...누가 진짜 원 소스의 주인인지 모르겠다.
function curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $g = curl_exec($ch); curl_close($ch); return $g; } |
안된다....
처음에 $timeout에서 에러가 나길래 딜레이 시간으로 10정도 적용했는데도 안된다...오류가 나오지도 않고 걍 안된다..
curl을 안써봐서 해결책도 잘 모르겠다...
다시 검색...
이쯤되니, JASON으로 댕겨오는 정보를 포기하고 그냥 HTML파싱을 해버리자는 생각으로 예전에 사용해본 simple_html_dom.php을 활용한 file_get_html 함수 사용...
실패.. 얘도 브라우저 정보를 안넘겨주는건 마찬가진가 보다.
다시검색...
영어를 지극히 싫어하는 내가 영문 사이트를 기웃거리기 시작했다.
외국의 어떤 훌륭한이가 질문에 답한 내용...
$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n")); $context = stream_context_create($opts); $header = file_get_contents('https://www.example.com',false,$context); |
된다..!
user-agent를 내껄로 바꿔야 하나 싶어서 $_SERVER['HTTP_USER_AGENT']를 넣으려 했으나, 이건 또 안된다. 그냥 샘플에 나온 소스 그대로 활용하니 된다...
처음부터 file_get_contents 함수 php.net 매뉴얼을 볼껄 그랬다..
애초에 여러가지 header값을 줄 수 있었던 거다. ㅠㅠ
브라우저 값을 거짓으로 던지는것 같아서..그게 좀 걸린다..
어쨌든 돌고 돌아 해결....
뿌듯한 마음에 기록 남겨본다..
'기타' 카테고리의 다른 글
캐리어 바퀴 직접 교체 (1) | 2024.01.30 |
---|---|
아파트 네트워크 확장 연결 (0) | 2024.01.29 |
닌텐도 스위치 젤다의 전설 : 야생의 숨결 - 탑 위치 지도 (0) | 2023.05.17 |
모닝 워셔액 노즐 자가 수리 (4) | 2022.09.05 |
제주인의 군산-서천-익산 여름여행 (0) | 2022.08.08 |