php – 登录PopAds.net

前端之家收集整理的这篇文章主要介绍了php – 登录PopAds.net前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
搜索过这个网站和谷歌,但似乎无法弄清楚如何让这个工作.我正在尝试使用 PHP脚本登录popads.net,因此我可以将我的网站收入汇总到一个页面上.但这个网站给我带来了麻烦.谁能看到我做错了什么?
<?PHP
//username and password of account
$username = 'myusername';
$password = 'mypassword';

//set the directory for the cookie using defined document root var
$path = DOC_ROOT."/ctemp";

//login form action url
$url="https://www.popads.net/users/login"; 
$postinfo = "data[User][username]=".$username."&data[User][password]=".$password;

$cookie_file_path = $path."/cookie.txt";

$ch = curl_init();
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_NOBODY,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file_path);
//set the cookie the site has for certain features,this is optional
curl_setopt($ch,CURLOPT_COOKIE,"cookiename=0");
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_REFERER,$_SERVER['REQUEST_URI']);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch,CURLOPT_POST,CURLOPT_POSTFIELDS,$postinfo);
curl_exec($ch);

//page with the content I want to grab
curl_setopt($ch,"https://www.popads.net/users/dashboard");
//do stuff with the info with DomDocument() etc
$html = curl_exec($ch);
echo $html;
curl_close($ch);
编辑03/26/2017

在某些时候,PopAds使用从AJAX请求中检索的两个服务器端变量切换到使用客户端Javascript到generate a check value.它看起来很容易在PHP中复制,但由于JS可以很容易地改变,所以不要玩猫捉老鼠,只需使用引擎为我们处理JS.

下面是一些运行CasperJS脚本登录获取所需内容PHP代码.首先,您需要使用Composer安装phpcasperjs/phpcasperjs.您还需要安装nodejs,并将以下模块安装到您计划运行此脚本的目录中:npm install phantomjs; npm安装casperjs

<?PHP

require_once 'vendor/autoload.PHP';

use Browser\Casper;

define('POPADS_EMAIL','you@yoursite.com');
define('POPADS_PASS','your password');

$casper = new Casper(__DIR__ . '/node_modules/casperjs/bin/');

//$casper->setOptions(['engine' => 'slimerjs']);
//$casper->setDebug(true);

// change the UA!
$casper->setUserAgent('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0');

// navigate to google web page
$casper->start('https://www.popads.net/');

// wait for text if needed for 3 seconds
$casper->waitForText('Reset password',5000);

//data[User][username]
//data[User][password]


$casper->fillFormSelectors(
    'form.didEnabled',array(
        'input#UserUsername' => POPADS_EMAIL,'input#UserPassword' => POPADS_PASS,),true
);

$casper->waitForText('</body>',5000);

$casper->capturePage(__DIR__ . '/login.jpg');

// run the casper script
$casper->run();

// need to debug? just check the casper output
//$output = $casper->getOutput();

$output = $casper->getHTML();

if (strpos($output,'PopAds - Dashboard') !== false) {
    echo "Logged in!";  
} else {
    echo "Login Failed.";

    var_dump($output);
}

这是一个有效的例子.我在代码添加了一些注释.这不再有效,仅供参考.

基本过程是:

>请求登录表单页面
>从登录表单中提取“sid”标记
>提取表单输入
>使用您的登录信息填充表单输入
>发送登录发布请求
>登录后从结果页面提取余额

代码

<?PHP

error_reporting(E_ALL);ini_set('display_errors',1);

// credentials
$USERNAME = 'username';
$PASSWORD = 'password';

// login url
$LOGINURL = 'https://www.popads.net/users/login';

// initialize curl
$ch = curl_init();
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);
curl_setopt($ch,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch,true);
curl_setopt($ch,CURLOPT_COOKIEFILE,''); // empty file means curl will keep cookies for the lifetime of the handle
// use cookiejar if you'd like to save the cookies for more than the request
curl_setopt($ch,120);
curl_setopt($ch,CURLOPT_TIMEOUT,120);

// set URL and request (establishes cookies,gets login sid)
curl_setopt($ch,$LOGINURL);
$data = curl_exec($ch);

// look for "sid" value on form action (required)
preg_match('#/users/login\?sid=([\w\d]+)#',$data,$match);
$sid        = $match[1];

// extract form fields from form
$formFields = getFormFields($data);

// set username and password
$formFields['data[User][username]'] = $USERNAME;
$formFields['data[User][password]'] = $PASSWORD;

// build http post string
$post_string = http_build_query($formFields);

// update login url with sid value and post login form
curl_setopt($ch,$LOGINURL . '?sid=' . $sid);
curl_setopt($ch,$post_string);

// execute login request (should be logged in at this point)
$result = curl_exec($ch);

// get balance from page
preg_match('#<h5>Current Balance:</h5>\s*<div class="overview overview_green">(.*?)</div>#is',$result,$balance);
$balance = trim($balance[1]);

// show balance
echo "Your balance is $balance<br>";


function getFormFields($data)
{
    if (preg_match('/(<form.*?id=.?UserLoginForm.*?<\/form>)/is',$matches)) {
        $inputs = getInputs($matches[1]);

        return $inputs;
    } else {
        die('didnt find login form');
    }
}

function getInputs($form)
{
    $inputs = array();

    $elements = preg_match_all('/(<input[^>]+>)/is',$form,$matches);

    if ($elements > 0) {
        for($i = 0; $i < $elements; $i++) {
            $el = preg_replace('/\s{2,}/',' ',$matches[1][$i]);

            if (preg_match('/name=(?:["\'])?([^"\'\s]*)/i',$el,$name)) {
                $name  = $name[1];
                $value = '';

                if (preg_match('/value=(?:["\'])?([^"\'\s]*)/i',$value)) {
                    $value = $value[1];
                }

                $inputs[$name] = $value;
            }
        }
    }

    return $inputs;
}

输出

Your balance is $0.00

原文链接:https://www.f2er.com/php/240078.html

猜你在找的PHP相关文章