php 应用curl模仿登录discuz以及模仿发帖

    添加时间:2013-7-23 点击量:

    <?php
    ¥discuz_url = http://127.0.0.1/discuz/;//论坛地址
    ¥login_url = ¥discuz_url .logging.php?action=login;//登录页地址



    ¥post_fields = array();
    //以下两项不须要批改
    ¥post_fields[loginfield] = username;
    ¥post_fields[loginsubmit] = true;
    //用户名和暗码,必须填写
    ¥post_fields[username] = tianxin;
    ¥post_fields[password] = 111111;
    //安然提问
    ¥post_fields[questionid] = 0;
    ¥post_fields[answer] = ;
    //@todo验证码
    ¥post_fields[seccodeverify] = ;


    //获取表单FORMHASH
    ¥ch = curl_init(¥login_url);
    curl_setopt(¥ch, CURLOPT_HEADER, 0);
    curl_setopt(¥ch, CURLOPT_RETURNTRANSFER, 1);
    ¥contents = curl_exec(¥ch);
    curl_close(¥ch);
    preg_match(/<input\stype=hidden\sname=formhash\svalue=(.?)\s\/>/i, ¥contents, ¥matches);
    if(!empty(¥matches)) {
    ¥formhash = ¥matches[1];
    } else {
    die(Not found the forumhash.);
    }



    //POST数据,获取COOKIE,cookie文件放在网站的temp目次下
    ¥cookie_file = tempnam(./temp,cookie);


    ¥ch = curl_init(¥login_url);
    curl_setopt(¥ch, CURLOPT_HEADER, 0);
    curl_setopt(¥ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt(¥ch, CURLOPT_POST, 1);
    curl_setopt(¥ch, CURLOPT_POSTFIELDS, ¥post_fields);
    curl_setopt(¥ch, CURLOPT_COOKIEJAR, ¥cookie_file);
    curl_exec(¥ch);
    curl_close(¥ch);


    //取到了关键的cookie文件就可以带着cookie文件去模仿发帖,fid为论坛的栏目ID
    ¥send_url = ¥discuz_url.post.php?action=newthread&fid=2;



    ¥ch = curl_init(¥send_url);
    curl_setopt(¥ch, CURLOPT_HEADER, 0);
    curl_setopt(¥ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt(¥ch, CURLOPT_COOKIEFILE, ¥cookie_file);
    ¥contents = curl_exec(¥ch);
    curl_close(¥ch);


    //这里的hash码和登岸窗口的hash码的正则不太一样,这里的hidden多了一个id属性
    preg_match(/<input\stype=hidden\sname=formhash\sid=formhash\svalue=(.?)\s\/>/i, ¥contents, ¥matches);
    if(!empty(¥matches)) {
    ¥formhash = ¥matches[1];
    } else {
    die(Not found the forumhash.);
    }



    ¥post_data = array();
    //帖子题目
    ¥post_data[subject] = test2;
    //帖子内容
    ¥post_data[message] = test2;
    ¥post_data[topicsubmit] = yes;
    ¥post_data[extra] = ;
    //帖子标签
    ¥post_data[tags] = test;
    //帖子的hash码,这个很是关键!假如缺乏这个hash码,discuz会警告你来路的页面不正确
    ¥post_data[formhash]=¥formhash;



    ¥ch = curl_init(¥send_url);
    curl_setopt(¥ch, CURLOPT_REFERER, ¥send_url); //假装REFERER
    curl_setopt(¥ch, CURLOPT_HEADER, 0);
    curl_setopt(¥ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt(¥ch, CURLOPT_COOKIEFILE, ¥cookie_file);
    curl_setopt(¥ch, CURLOPT_POST, 1);
    curl_setopt(¥ch, CURLOPT_POSTFIELDS, ¥post_data);
    ¥contents = curl_exec(¥ch);
    curl_close(¥ch);


    //清理cookie文件
    unlink(¥cookie_file);


    ?>

    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: