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


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파일이 있는 것도 확인했습니다. 같은 경험을 하신분이나 해결방법을 알고 계시는 분들 조언 부탁드립니다!ㅠ


조회수 335


1 답변


좋아요
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");
?>

  • 2016년 08월 02일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close