define('COOKIE', './cookie.txt'); define('MYURL', 'https://register.pandi.or.id/main'); function getUrl($url, $method='', $vars='', $open=false) { $agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'; $header_array = array( "Via: 1.1 register.pandi.or.id", "Keep-Alive: timeout=15,max=100", ); static $cookie = false; if (!$cookie) { $cookie = session_name() . '=' . time(); } $referer = 'https://register.pandi.or.id/main'; $ch = curl_init(); if ($method == 'post') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "$vars"); } curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array); curl_setopt($ch, CURLOPT_USERAGENT, $agents); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 5); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE); curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); $buffer = curl_exec($ch); if (curl_errno($ch)) { echo "error " . curl_error($ch); die; } curl_close($ch); return $buffer; } function save_captcha($ch) { $agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'; $url = "https://register.pandi.or.id/jcaptcha"; static $cookie = false; if (!$cookie) { $cookie = session_name() . '=' . time(); } $ch = curl_init(); // Initialize a CURL session. curl_setopt($ch, CURLOPT_URL, $url); // Pass URL as parameter. curl_setopt($ch, CURLOPT_USERAGENT, $agents); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE); curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return stream contents. curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // We'll be returning this $data = curl_exec($ch); // // Grab the jpg and save the contents in the curl_close($ch); // close curl resource, and free up system resources. $captcha_tmpfile = './captcha/captcha-' . rand(1000, 10000) . '.jpg'; $fp = fopen($tmpdir . $captcha_tmpfile, 'w'); fwrite($fp, $data); fclose($fp); return $captcha_tmpfile; } if (isset($_POST['captcha'])) { $id = "yudohartono"; $pw = "mypassword"; $postfields = "navigation=authenticate&login-type=registrant&username=" . $id . "&password=" . $pw . "&captcha_response=" . $_POST['captcha'] . "press=login"; $url = "https://register.pandi.or.id/main"; $result = getUrl($url, 'post', $postfields); echo $result; } else { $open = getUrl('https://register.pandi.or.id/main', '', '', true); $captcha = save_captcha($ch); $fp = fopen($tmpdir . "/cookie12.txt", 'r'); $a = fread($fp, filesize($tmpdir . "/cookie12.txt")); fclose($fp);
<form action='' method='POST'>
<img src='<?php echo $captcha ?>' />
<input type='text' name='captcha' value=''>
<input type='submit' value='proses'>
</form>";
if (!is_readable('cookie.txt') && !is_writable('cookie.txt')) { echo "cookie fail to read"; chmod('../pandi/', '777'); } }
这个cookie.txt
# Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. register.pandi.or.id FALSE / FALSE 0 JSESSIONID 05CA8241C5B76F70F364CA244E4D1DF4
我提交表格后只显示
HTTP/1.1 200 OK Date: Wed, 27 Apr 2011 07:38:08 GMT Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-4.0.0 (build: CVSTag=JBoss_4_0_0 date=200409200418) Content-Length: 0 Via: 1.1 register.pandi.or.id Content-Type: text/plain X-Pad: avoid browser bug
如果没有错误“Captcha invalid” 总是无法登录pandi 我的剧本有什么不对? 我不想破解Captcha,但我想从我的网页上显示验证码和用户输入验证码,因此用户可以自动从我的网站注册域名dotID
答案 0 :(得分:20)
验证码旨在区分人类和机器人(程序)。好像你正试图用程序登录。验证码似乎可以完成它的工作:)。
我看不到合法的方式。
答案 1 :(得分:2)
之所以发生,是因为,
您从第一个getURL (ie first curl_exec)
获取了验证码图像并处理了验证码,但提交了您要求的验证码getURL (ie again curl_exec)
,这意味着再次使用新的验证码进入新页面。
所以你要放置旧的验证码并将其放入新的验证码中。我有同样的问题&amp;解决了它。
答案 2 :(得分:0)
Captcha是服务器在您点击页面时创建的动态图像。它会不断变化,您必须从页面中提取验证码,然后解析它,然后提交您的页面进行登录。当触发页面加载时,Captcha会不断变化!
答案 3 :(得分:0)
使用PHP我不知道该怎么做,你必须得到验证码并找到解决它的方法。它有很多算法可供你使用,但是如果你想使用java,我已经从this link攻击了源代码以获得解码验证码的代码,它适用于大量的验证码系统
因此,您可以尝试实现自己的验证码解算器,这将花费大量时间,尝试找到PHP的现有实现,或者,恕我直言,最好的选择,使用JDownloader代码库。
答案 4 :(得分:0)
使用无头浏览解决方案是可能的。即:节点上的zombie.js coffee.js ..也有可能提取&#34;图像&#34;来自验证码,并使用图像识别,&#34;阅读&#34;图像并将其转换为文本,然后使用表单发布。
截至今天,唯一可靠的方法是&#34;欺骗&#34;验证码是使用无头浏览。
答案 5 :(得分:0)
是的,Andro Selva是对的。在第二个请求它给出了新的验证码。一旦用getUrl函数加载验证码,第二个加载来自save_captcha函数,所以这是2个不同的图像。
它必须做这样的事情: 在关闭curl之前和发布之前下载验证码图像并告诉脚本等待,直到你提供验证码答案 - 我将使用preg_match。它还需要一些javascript。
如果验证码图像是从javascript生成的,则需要使用相同的cookie或令牌执行此javascript。在这种情况下,更简单的解决方案是用例如记录标题。 livehttpheaders addon for mozila ffox。