首頁  >  文章  >  後端開發  >  CURL 模擬登陸並取得資料 部落格分類: 開發

CURL 模擬登陸並取得資料 部落格分類: 開發

巴扎黑
巴扎黑原創
2016-11-09 11:10:591127瀏覽

在做採集程式時,有時我們要抓取一些登入才能存取的頁面。但有時即使我們登入成功了,卻還是無法抓取相關頁面,這是為什麼呢?

    嗯,最有可能的原因是沒把登入成功後的 cookie 一併傳遞過去。

    對於一些安全防範措施不是做得很高的網站,我們可以透過 PHP 的函數 curl_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