开发者社区> 问答> 正文

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

我用php的curl函数模拟登陆,不是为了登录<span style=""line-height:1.5;font-size:10pt;"">后抓取其他页面,是想模拟登陆获取到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

展开
收起
一枚小鲜肉帅哥 2020-06-20 19:37:22 1341 0
1 条回答
写回答
取消 提交回答
  • 菜不可及的程序猿

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

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

    后面就可以直接用curl访问其它页了. 、 只能通过curl访问才有效.

    2020-06-20 19:38:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载