cURL登录Linkbucks

时间:2015-09-25 11:30:41

标签: php curl login

我正在尝试制作一个登录我的Linkbucks帐户的脚本,以获取我当前的统计数据。

他们提供和api,但仅用于创建链接,我需要的是你得到统计数据。

我发现的事情:

  1. 首先,你必须保持记录
  2. 要获取统计信息,网站会对https://www.linkbucks.com/Profile.aspx?task=manageLinks&action=loadPublisherStats进行ajax调用,其中包含以下JSON帖子:{“month”:“09/01/2015”}。
  3. 通过这篇文章很容易获得我需要的信息,问题是我的脚本无效。

    我与你分享代码,所以请帮助我。

    任何想法或解决方案,或任何将被欣赏的。

    这是我的剧本:

    <?php
    
    $urlLogin = "https://www.linkbucks.com/Default.aspx";
    
    $ch = getSource($urlLogin);
    $fuente = curl_exec($ch);
    
    $re = "/<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"(.*?)\" \\/>/";  
    preg_match($re, $fuente, $matches);
    
    $re = "/<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"(.*?)\" \\/>/";  
    preg_match($re, $fuente, $validation);
    
    $re = "/<input type=\"hidden\" name=\"__VIEWSTATEGENERATOR\" id=\"__VIEWSTATEGENERATOR\" value=\"(.*?)\" \\/>/";  
    preg_match($re, $fuente, $generator);
    
    $post = array(
        "ctl00\$ctl00\$phMenu\$LeftMenuBar\$ctl00\$Username" => "yourusername" , 
        "ctl00\$ctl00\$phMenu\$LeftMenuBar\$ctl00\$Password" => "yourpassword" ,
        "__VIEWSTATE" => $matches[1] , 
        "__VIEWSTATEGENERATOR" => $generator[1] ,
        "__EVENTVALIDATION" => $validation[1]
    );
    $data = postData($urlLogin, $post);
    
    echo $data;
    
    function getSource($url, $header = null) {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        $config['useragent'] = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.33 (KHTML, like Gecko) Ubuntu/9.10 Chromium/13.0.752.0 Chrome/13.0.752.0 Safari/534.33';
        curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);
        curl_setopt($ch, CURLOPT_REFERER, (is_null($header) ? 'https://www.google.com/' : $header));
        return $ch;
    }
    
    function postData($url , $array) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
    
        curl_setopt($ch, CURLOPT_REFERER, "https://www.linkbucks.com/Default.aspx");
    
        $server_output = curl_exec($ch);
    
    
        curl_setopt($ch, CURLOPT_URL, 'https://www.linkbucks.com/Default.aspx?ReturnUrl=%2fManageLinks');
        curl_setopt($ch, CURLOPT_POST, 0);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        $server_output = curl_exec($ch);
    
        return ($server_output);
    }
    
    ?>
    

2 个答案:

答案 0 :(得分:1)

这应该有效:

$urlLogin = "https://www.linkbucks.com/Default.aspx?ReturnUrl=%2fManageLinks";
$useragent = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.33 (KHTML, like Gecko) Ubuntu/9.10 Chromium/13.0.752.0 Chrome/13.0.752.0 Safari/534.33';
$source = getSource($urlLogin, $useragent);

$viewstate = findStringByRegex("/<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"(.*?)\" \/>/", $source);
$generator = findStringByRegex("/<input type=\"hidden\" name=\"__VIEWSTATEGENERATOR\" id=\"__VIEWSTATEGENERATOR\" value=\"(.*?)\" \\/>/", $source);
$validation = findStringByRegex("/<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"(.*?)\" \\/>/", $source);


$post = array(
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$Username' => "yourUsername",
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$Password' => "yourPassword",
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$LoginImgBtn.x' => 0,
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$LoginImgBtn.y' => 0,
    "__VIEWSTATE" => $viewstate,
    "__VIEWSTATEGENERATOR" => $generator,
    "__EVENTVALIDATION" => $validation
);
$data = postData($urlLogin, $post);

echo $data;

function getSource($url, $useragent = null, $header = null) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_REFERER, (is_null($header) ? 'https://www.google.com/' : $header));

    return curl_exec($ch);
}

function postData($url, $postArray) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postArray);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
    curl_setopt($ch, CURLOPT_REFERER, "https://www.linkbucks.com/Default.aspx");

    $server_output = curl_exec($ch);

    return $server_output;
}

function findStringByRegex($regex, $source) {
    preg_match($regex, $source, $matches);

    return $matches[1];
}

我已经清理了你的代码,它大部分都很好,你只是缺少2个帖子字段:ctl00 $ ctl00 $ phMenu $ LeftMenuBar $ ctl00 $ LoginImgBtn.x和ctl00 $ ctl00 $ phMenu $ LeftMenuBar $ ctl00 $ LoginImgBtn。 ý&#39;

答案 1 :(得分:0)

最后,感谢 runz0rd ,我能够让代码正常运行!!

非常感谢你们!

以下是代码的最终版本:

<?php

$urlLogin = "https://www.linkbucks.com/Default.aspx?ReturnUrl=%2fManageLinks";
$useragent = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.33 (KHTML, like Gecko) Ubuntu/9.10 Chromium/13.0.752.0 Chrome/13.0.752.0 Safari/534.33';
$source = getSource($urlLogin, $useragent);

$viewstate = findStringByRegex("/<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"(.*?)\" \/>/", $source);
$generator = findStringByRegex("/<input type=\"hidden\" name=\"__VIEWSTATEGENERATOR\" id=\"__VIEWSTATEGENERATOR\" value=\"(.*?)\" \\/>/", $source);
$validation = findStringByRegex("/<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"(.*?)\" \\/>/", $source);


$post = array(
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$Username' => "yourusername",
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$Password' => "yourpassword",
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$LoginImgBtn.x' => 0,
    'ctl00$ctl00$phMenu$LeftMenuBar$ctl00$LoginImgBtn.y' => 0,
    "__VIEWSTATE" => $viewstate,
    "__VIEWSTATEGENERATOR" => $generator,
    "__EVENTVALIDATION" => $validation
);
$data = postData($urlLogin, $post);

echo $data;

function getSource($url, $useragent = null, $header = null) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_REFERER, (is_null($header) ? 'https://www.google.com/' : $header));

    return curl_exec($ch);
}

function postData($url, $postArray) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postArray));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
    curl_setopt($ch, CURLOPT_REFERER, "https://www.linkbucks.com/Default.aspx");

    $server_output = curl_exec($ch);

    curl_setopt($ch, CURLOPT_URL, "https://www.linkbucks.com/Profile.aspx?task=manageLinks&action=loadPublisherStats");
    curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    $fecha = json_encode( array( "month"=> "09/01/2015" ) );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $fecha );
    $server_output = curl_exec($ch);

    return $server_output;
}

function findStringByRegex($regex, $source) {
    preg_match($regex, $source, $matches);
    return $matches[1];
}

?>