php에서 https 페이지의 내용 크롤링에 관해 질문드립니다.

조회수 5476회

php로 https 페이지의 내용을 긁어오려합니다. http는 snoopy 클래스로 어렵지않게 접근이 가능했으나, https는 curl을 이용해서 해야한다는 자료가 많아서 curl로 접근 코드를 짜고있습니다.

현재 코드입니다.

<?php
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,"https://접속주소");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_SSLVERSION,3);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "ID네임=ID값&PW네임=PW값");
curl_setopt ($ch, CURLOPT_TIMEOUT, 30);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close ($ch);
echo $result;
?>

// 계정,비번 전달하는부분은 array로 구현해도 같은 결과였습니다.

결과는 500 코드입니다. 500코드는 php 소스코드상의 오류로인해 나오는 결과라고 알고 있는데요, 현재 환경은 아파치, php7입니다. php.ini 에서 curl dll파일도 사용하도록 주석제거했구요, dll파일이 있는 것도 확인했습니다. 같은 경험을 하신분이나 해결방법을 알고 계시는 분들 조언 부탁드립니다!ㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 동작하지 않는데는 많은 이유가 있을 수 있습니다.

    (1) 올려주신 코드와 같이 ID/PW만 가지고 접속을 시도하는걸 방지하기 위해서 CSRF Token이라는걸 이용합니다. 그래서 발생하는 문제일수도 있을것 같네요.

    (2) 사용하신 접속주소가 계정정보를 POST로 날리는 주소가 맞나요? 사이트 접속주소가 아니라 ID/PW를 Post로 날리는 주소이어야 합니다.

    https로 접속해서 정보를 읽어오고 싶다면 다음과 같이 작성하면 읽어오실 수 있습니다.

    <?php
    function getHTML($url){
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_RANGE, '0-100');
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
       $content = curl_exec($ch);
       curl_close($ch);
       echo $url."<br>";
    
       echo $content;
    }
    
    getHTML("https://hashcode.co.kr");
    ?>
    
    

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)