Bei Erfassungsvorgängen müssen wir manchmal einige Seiten erfassen, auf die nur nach der Anmeldung zugegriffen werden kann. Aber manchmal können wir die relevanten Seiten auch bei erfolgreicher Anmeldung nicht crawlen. Warum ist das so?
Nun, der wahrscheinlichste Grund ist, dass das Cookie nach erfolgreicher Anmeldung nicht weitergegeben wurde.
Bei einigen Websites, deren Sicherheitsmaßnahmen nicht sehr hoch sind, können wir uns über die PHP-Funktion curl_setopt anmelden.
<?php //在指定目录中建立一个具有唯一文件名的文件。如果该目录不存在,tempnam() 会在系统临时目录中生成一个文件,并返回其文件名。 $cookie_file = tempnam('./tmp','cookie');//其中 cookie 为文件名的前缀 $postfield = 'LoginForm[username]=admin&LoginForm[password]=admin&LoginForm[rememberMe]=0&yt0=Login'; $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); ?>