>  기사  >  백엔드 개발  >  CURL은 로그인을 시뮬레이션하고 데이터를 얻습니다. 블로그 카테고리: 개발

CURL은 로그인을 시뮬레이션하고 데이터를 얻습니다. 블로그 카테고리: 개발

巴扎黑
巴扎黑원래의
2016-11-09 11:10:591131검색

수집 절차를 진행하다 보면 로그인을 통해서만 접근할 수 있는 일부 페이지를 캡쳐해야 하는 경우가 있습니다. 하지만 로그인에 성공하더라도 여전히 관련 페이지를 크롤링할 수 없는 경우가 있습니다. 이유는 무엇입니까?

가장 유력한 이유는 로그인 성공 후 쿠키가 전달되지 않았기 때문일 것입니다.

보안 수준이 그다지 높지 않은 일부 웹사이트의 경우 PHP 함수인 cur_setopt를 통해 로그인할 수 있습니다.

<?php
//在指定目录中建立一个具有唯一文件名的文件。如果该目录不存在,tempnam() 会在系统临时目录中生成一个文件,并返回其文件名。 
$cookie_file = tempnam(&#39;./tmp&#39;,&#39;cookie&#39;);//其中 cookie 为文件名的前缀
$postfield = &#39;LoginForm[username]=admin&LoginForm[password]=admin&LoginForm[rememberMe]=0&yt0=Login&#39;;
$url = "http://localhost/testdrive/index.php?r=site/login";//登录 提交的 url,可以通过 firfox 的 firebug 工具或者 google chrome 的开发人员工具来查看
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);//保存 cookie 的文件
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postfield);
$strlen = curl_exec($ch);
$url = "http://localhost/testdrive/index.php";//访问登录后的页面。
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);//再次发送请求时,cookie 就会自动传递过去
$strlen = curl_exec($ch);
?>


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.