前言

实现思路:利用CURL模拟登录目标站点 -> 保存Cookie -> 携带Cookie后Get签到入口 -> 签到完成!

需注意:如果用户名包含中文字符则需要urlencode()函数来编码成url专用格式字符串再执行提交操作,反之urldecode()则可以解码回原字符。A站的Cookie只要不改变账户密码则不会变,因此首次登录成功取得其cookie后就可以长时间不进行登录操作。可直接使用历史cookie进行操作。

Code

程序入口


$user = '音風';
//A站用户名 支持中文
$pwd = '';
//登录密码
$acfun = new acfun();
//实例化acfun类
$cookieFile = $acfun->login($user,$pwd);
//执行登录操作,成功返回cookie
$acfun->sign($cookieFile);
//执行签到操作
function __autoload($className){
    include './class/'.$className.'.class.php';
}

acfun类


class acfun{
    public function login($user,$pwd){
        $url = 'http://www.acfun.tv/login.aspx';
        $path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'].'cookie/'.$user.'.cookie';
        $postFields = 'username='.urlencode($user).'&password='.$pwd;
        if(!is_file(iconv('UTF-8','GBK',$path))){
            file_put_contents(iconv('UTF-8','GBK',$path),'');
            $login = curl_init($url);
            curl_setopt($login,CURLOPT_HEADER,0);
            curl_setopt($login,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($login,CURLOPT_POST,1);
            curl_setopt($login,CURLOPT_POSTFIELDS,$postFields);
            curl_setopt($login,CURLOPT_COOKIEJAR,iconv('UTF-8','GBK',$path));
            curl_exec($login);
            curl_close($login);
        }
        return $path;
    }
    public function sign($cookieFile){
        $url = 'http://www.acfun.tv/member/checkin.aspx';
        $sign = curl_init($url);
        curl_setopt($sign,CURLOPT_HEADER,0);
        curl_setopt($sign,CURLOPT_RETURNTRANSFER,0);
        curl_setopt($sign,CURLOPT_COOKIEFILE,iconv('UTF-8','GBK',$cookieFile));
        curl_exec($sign);
    }
}

一介布衣