curl 질문입니다. (curl 대상 : 공공기관-청약홈)
본문
짧은 지식에 5시간동안 삽질하다 원인이 무엇인지 도무지 감이 안잡혀 질문을 올려봅니다.
api 읽어오는 것들은 큰 문제없이 처리를 했는데, 제공받은 데이터의 url에서 curl이 제대로 안되어서 한참 애먹고 있습니다!
어떤 문제때문에? 제대로 못가져오는 걸까요?^^;;
curl로 데이터를 읽어오기 위한 페이지 url입니다. (어떠한 인증 없이 불러올 수 있습니다.)
아래는 삽질하다 마지막에 처리한 curl 소스입니다.
※※ 도와주신분에게 커피쿠폰 쏘겠습니다..!
$url = 'https://www.applyhome.co.kr/ai/aia/selectAPTLttotPblancDetail.do?houseManageNo=2022000894&pblancNo=2022000894';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //POST data
curl_setopt($ch, CURLOPT_POST, true); //true시 post 전송
$headers = [
'accept: application/json',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding: gzip, deflate, br',
'Connection: keep-alive',
'Upgrade-Insecure-Requests: 1',
'Sec-Fetch-Dest: document',
'Sec-Fetch-Mode: navigate',
'Sec-Fetch-Site: none',
'Sec-Fetch-User: ?1'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$docu = curl_exec ($ch);
curl_close ($ch);
echo $docu;
echo "<br/><br/><br/><br/><br/><br/>";
//ISO-8859-1 -> utf-8 인코딩
$utf8 = utf8_encode($docu);
echo "<br/><br/><br/><br/><br/><br/>";
echo bin2hex($utf8), "\n";
답변 1
아이고야.. 자문자답입니다..^^;;
아무리봐도 header부분의 요청이 이상하다 싶어 문제되는 부분을 하나씩 찾다보니
accept-encoding을 할 필요가 없었던것 같습니다.
습관적으로 복붙을 했는데.. 습관이 문제였던것 같아요 ^^;
혹시나 추후에 청약홈 파싱하시는분들 중 헤매실 분들을 위해..
불필요한 코드 삭제하고 올려봅니다.
$url = 'https://www.applyhome.co.kr/ai/aia/selectAPTLttotPblancDetail.do?houseManageNo=2022000894&pblancNo=2022000894';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //POST data
curl_setopt($ch, CURLOPT_POST, true); //true시 post 전송
$headers = [
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$docu = curl_exec ($ch);
curl_close ($ch);
echo $docu;
답변을 작성하시기 전에 로그인 해주세요.