php的curl函数模拟登陆获取cookie,然后能用获取到的cookie保持登录状态吗

caesium 发布于 2015/07/29 15:53
阅读 3K+
收藏 1
PHP

我用php的curl函数模拟登陆,不是为了登录后抓取其他页面,是想模拟登陆获取到cookie,然后就直接用获取到的cookie保持登录状态,代码如下:

<?php
function login($url, $cookie, $post) { 
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中 
    curl_setopt($curl, CURLOPT_POST, 1);//post方式提交 
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息 
    curl_exec($curl); 
    curl_close($curl);

function get_content($url, $cookie) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie 
    $rs = curl_exec($ch);
    curl_close($ch); 
    return $rs; 



//设置post的数据 
$post = array ( 
    'email' => 'xxx@qq.com', 
    'pwd' => 'xxxxx', 
    'goto_page' => '/my', 
    'error_page' => '/login', 
    'save_login' => '1', 
    'submit' => '现在登录' 
); 
 
 
$url = "http://m.oschina.net/action/user/login"; 
$cookie = dirname(__FILE__) . '/cookie_oschina.txt'; 
$url2 = "http://m.oschina.net/my";  
login($url, $cookie, $post); 
$content = get_content($url2, $cookie); 
//删除cookie文件 
//@ unlink($cookie); 
echo $content;
?>

程序执行能够成功,也能够用获取到的cookie去访问其他页面,可是进入到登录页面还是需要用户自己登录,(是因为cookie没有放在指定文件夹下吗,如果放在指定文件夹下面命名的话是不是也有要求,然后该网站才能知道是自己的cookie)

非常感谢

加载中
0
Tuesday
Tuesday

先判断cookie.txt是否存在, 是否有内容, 更新时间. 

假如有不符合的, 就用curl登录一次, 然后再判断cokie.txt

后面就可以直接用curl访问其它页了.

Tuesday
Tuesday
回复 @caesium : 那肯定呀, 只能通过curl访问才有效.
caesium
caesium
cookie.txt存在,我也可以通过使用curl函数取访问其他页面,但是不在程序中(直接去访问页面)就还得重新登陆(谢谢~)
返回顶部
顶部