检索验证码并使用curl php登录

时间:2013-03-08 06:21:41

标签: php session curl web captcha

我正在开发一个项目。所以我必须从下面提到的网站获取验证码。用户将提交验证码和他的登录凭据,然后我必须提取数据(为了用户的利益)。但是在我提交验证码后,只显示登录页面,没有任何反应。

我已尝试过多个网站,只显示登录页面。我知道如何在登录后获取数据,但验证码确实令人头疼

<?php

 $cookie="cookie.txt";
function open($url)
{

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,$url);  
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_COOKIE, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie);
    curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt ($ch, CURLOPT_REFERER, $url);
    $result = curl_exec($ch);  
    curl_close($ch);

    return $result;
}

function between($string, $start, $end)
{
    $out    = explode($start, $string);

    if(isset($out[1]))
    {
        $string = explode($end, $out[1]);
        echo $string[0];
        return $string[0];
    }

    return '';
}

function get_captcha()
{
    $url    = 'https://academics.vit.ac.in/student/stud_login.asp';

    $open   = open($url);

    $code   = between($open, '<img src='https://academics.vit.ac.in/student/captcha.asp', '">');

   // echo 'https://academics.vit.ac.in/student/captcha.asp' . $code;

    return 'https://academics.vit.ac.in/student/captcha.asp' . $code;
   //return ;

}


function rahul()
{
    $capth=htmlspecialchars($_POST['code']);

    echo $capth;

    $username="xyz"; 
$password="abc"; 
$url="https://academics.vit.ac.in/student/stud_login.asp"; 
$cookie="cookie.txt";
$veri=$capth;

$com="Login";

$postdata = "regno=".$username."&passwd=".$password."&vrfcd=".$veri."&submit=".$com;

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie);  // <-- add this line
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 

echo $result;  


$data = curl_exec($ch);

}




?>


 <html>
 <body>
<form action="" method="post">
<img src="<?php echo get_captcha(); ?>" border="0" /><br />
<input type="text" name="code" value="<?= isset($_POST['code']) ? htmlspecialchars($_POST['code']) : '' ?>" /><br />
<input type="submit" name="submit" value="submit"/>
</form>

<?php


if(isset($_POST['submit'])) {
 rahul();
}
?>
</body>
</html>

1 个答案:

答案 0 :(得分:3)

在这种情况下,直接从CURL打开capcthca图像并以二进制代码返回。

<?php
$cookie='cookie.txt';
if(!file_exists($cookie)){
        $fh = fopen($cookie, "w");
        fwrite($fh, "");
        fclose($fh);
}
$ch = curl_init();   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);   
    curl_setopt($ch, CURLOPT_URL, "https://academics.vit.ac.in/student/captcha.asp");  
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);   
    curl_setopt($ch, CURLOPT_COOKIE,1);         
    curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie);
    curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);      
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    $result = curl_exec($ch);   
curl_close($ch);  
$ImageCaptcha=base64_encode($result);
?>

查看图像base64编码

<?php echo '<img src="data:image/jpeg;base64,'.$ImageCaptcha.'">'; ?>

我已经测试过这段代码&amp;这对我有用