robot12
جمعه 27 تیر 1393, 13:18 عصر
یه مشکل دارم توی php میخوام captcha یک سایت رو بگیرم، روی صفحه نشون بدم و یوزر اون رو وارد کنه و بعدش هم کد ارسال بشه.
برای مثال سایت http://zone-hc.com/Add/ رو در نظر بگیرید. کپچا از اینجا گرفته میشه: http://zone-hc.com/captcha.php
که اگه به عکس تبدیل بشه هر بار که فراخوانی میشه عوض میشه.
من یه راه حل میخوام که این عکس رو اول بگیرم (curl_exec) و به یوزر نمایش بدم بعد یوزر مقدارش رو وارد کنه و فرستاده بشه (curl_exec) به سرور اما مشکل اینجاست که در هر بار که curl_exec انجام میشه کد کپچا فرق میکنه. حتی با استفاده از CURLOPT_COOKIE و مشخص کردن cookiefile و cookiejar و cookiesession هم باز این اتفاق میفته.
بعضیا میگن کپچا برای این ساخته شده که از این عمل جلوگیری کنه. پس دلیل اینکه با #C میشه اینکارو انجام داد چیه؟ برنامه هایی دیدم که کاربر کپچا رو وارد میکنه و بدون هیچ مشکلی ارسال میشه به سرور.
برای مثال این کد مشکل داره:
<?php
$url = 'loginpage.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIE,1);
curl_setopt($ch, CURLOPT_COOKIEJAR,'coo.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE,'coo.txt');
$result = curl_exec($ch);
preg_match('/<img src="(.*?)" \/>/', $result, $capt);
echo '<form method="post">
username: <input name="user" type="text" />
password: <input name="pass" type="text" />
captcha: <input name="capt" type="text" /><img src="'.$capt[1].'" />
<input name="submit" type="submit" />
</form>';
if($_POST){
$data = array('user' => $_POST['user'],
'pass' => $_POST['pass'],
'captcha' => $_POST['capt'],
'submit' => 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
echo curl_exec($ch);//Login Failed (Captcha invalid)
}
curl_close($ch);
?>
برای مثال سایت http://zone-hc.com/Add/ رو در نظر بگیرید. کپچا از اینجا گرفته میشه: http://zone-hc.com/captcha.php
که اگه به عکس تبدیل بشه هر بار که فراخوانی میشه عوض میشه.
من یه راه حل میخوام که این عکس رو اول بگیرم (curl_exec) و به یوزر نمایش بدم بعد یوزر مقدارش رو وارد کنه و فرستاده بشه (curl_exec) به سرور اما مشکل اینجاست که در هر بار که curl_exec انجام میشه کد کپچا فرق میکنه. حتی با استفاده از CURLOPT_COOKIE و مشخص کردن cookiefile و cookiejar و cookiesession هم باز این اتفاق میفته.
بعضیا میگن کپچا برای این ساخته شده که از این عمل جلوگیری کنه. پس دلیل اینکه با #C میشه اینکارو انجام داد چیه؟ برنامه هایی دیدم که کاربر کپچا رو وارد میکنه و بدون هیچ مشکلی ارسال میشه به سرور.
برای مثال این کد مشکل داره:
<?php
$url = 'loginpage.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIE,1);
curl_setopt($ch, CURLOPT_COOKIEJAR,'coo.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE,'coo.txt');
$result = curl_exec($ch);
preg_match('/<img src="(.*?)" \/>/', $result, $capt);
echo '<form method="post">
username: <input name="user" type="text" />
password: <input name="pass" type="text" />
captcha: <input name="capt" type="text" /><img src="'.$capt[1].'" />
<input name="submit" type="submit" />
</form>';
if($_POST){
$data = array('user' => $_POST['user'],
'pass' => $_POST['pass'],
'captcha' => $_POST['capt'],
'submit' => 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
echo curl_exec($ch);//Login Failed (Captcha invalid)
}
curl_close($ch);
?>