我搜索过这个网站和谷歌,但似乎无法弄清楚如何让这个工作.我正在尝试使用
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
原文链接:https://www.f2er.com/php/240078.html在某些时候,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