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 BrowserCasper;
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);
}
这是一个有效的例子.我在代码中添加了一些注释.这不再有效,仅供参考. 基本过程是: >请求登录表单页面 和代码: <?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=([wd]+)#',$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;
}
输出:
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
