CURL如何使用Captcha和Session登录


define('COOKIE','./COOKIE.txt'(;define('MYURL','https://register.pandi.or.id/main'(;函数getUrl($url,$method='',$vars='',$0open=false({$agents='Mozilla/5.0(X11;U;Linux i686;en-US(AppleWebKit/534.16(KHTML,类似Gecko(Chrome/10.0.648.204 Safari/534.16';$header_array=数组("Via:1.1 register.pandi.or.id","保持活动:超时=15,最大值=100",);static$cookie=false;if(!$cookie({$cookie=session_name((。'='。时间((;}$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_RETURNTTRANSFER,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(;死亡}curl_close($ch(;return$buffer;}函数save_captcha($ch({$agents='Mozilla/5.0(X11;U;Linux i686;en-US(AppleWebKit/534.16(KHTML,类似Gecko(Chrome/10.0.648.204 Safari/534.16';$url="https://register.pandi.or.id/jcaptcha";static$cookie=false;if(!$cookie({$cookie=session_name((。'='。时间((;}$ch=curl_init((;//初始化CURL会话。curl_setopt($ch,CURLOPT_URL,$URL(;//将URL作为参数传递。curl_setopt($ch,CURLOPT_USERAGENT,$agents(;curl_setopt($ch,CURLOPT_COOKIESSION,true(;curl_setopt($ch,CURLOPT_COOKIE,$COOKIE(;curl_setopt($ch,CURLOPT_COOKIEJAR,COOKIE(;curl_setopt($ch,CURLOPT_COOKIEFILE,COOKIE(;curl_setopt($ch,CURLOPT_RETURNTTRANSFER,1(;//返回流内容。curl_setopt($ch,CURLOPT_BINARYTRANSFER,1(;//我们会归还这个$data=curl_exec($ch(;////获取jpg并将内容保存在curl_close($ch(;//关闭curl资源,释放系统资源。$captcha_tmpfile='/captcha/captcha-'。兰特(100010000(。jpg’;$fp=fopen($tmpdir.$captcha_tmpfile,'w'(;fwrite($fp,$data(;fclose($fp(;return$captcha_tmpfile;}if(isset($_POST[捕获](({$id="yudohartono";$pw="mypassword";$postfields="navigation=身份验证和登录类型=注册人和用户名="$id。"&password="$pw。"&captcha_reresponse="$_POST[捕获]。"按=登录";$url="https://register.pandi.or.id/main";$result=getUrl($url,'post',$postfields(;echo$result;}其他{$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_writeable('okie.txt'({echo"cookie读取失败";chmod('../pandi/','777'(;}}

this cookie.txt

#Netscape HTTP Cookie文件#http://curl.haxx.se/rfc/cookie_spec.html#这个文件是由libcurl生成的!编辑风险自负。register.pandi.org.id FALSE/FALSE 0 JSESSIONID 05CA8241C5B76F70F364CA244E4D1DF4

在我提交表格后,只显示

HTTP/1.1 200确定日期:2011年4月27日星期三07:38:08 GMT服务器:Apache Coyote/1.1 X-Powered-By:Servlet 2.4;Tomcat-5.0.28/JBoss-4.0.0(内部版本:CVSTag=JBoss_4_0_0日期=200409200418(内容长度:0通过:1.1 register.pandi.id内容类型:text/plain X-Pad:避免浏览器错误

如果不是错误"Captcha无效"登录pandi总是失败我的剧本怎么了
我不想打破Captcha,但我想在我的网页上显示Captcha和用户输入的Captcha。这样用户就可以从我的网页自动注册域dotID。

Captcha旨在区分人类和机器人(程序(。似乎您正在尝试使用程序登录。captcha似乎完成了它的工作:(。

我看不到合法的途径。

发生这种情况是因为,
您从第一个getURL (ie first curl_exec)获取了您的captcha图像并处理了captcha,但要提交您的capatcha,您需要getURL (ie again curl_exec),这意味着使用新的captcha。

所以你把旧的便签放在新的便签里。我也有同样的问题&解决了它。

Captcha是服务器在您点击页面时创建的动态图像。它会不断变化,你必须从页面中提取captcha,然后解析它,然后提交你的页面进行登录。当页面被触发加载时,Captcha将不断更改!

使用无头浏览解决方案是可能的。ie:节点上的zombie.js coffee.js。。此外,还可以从captcha中提取"图像",并使用图像识别,"读取"图像并将其转换为文本,然后与表单一起发布。

到目前为止,唯一能"欺骗"captcha的方法就是无头浏览。

是的,Andro Selva是对的。在第二次请求时,它给出了新的captcha。一旦它用getUrl函数加载captcha,第二次加载来自save_captcha函数,所以这是两个不同的映像。

它必须这样做:在关闭curl之前和发布之前下载captcha图像,并告诉脚本等待,直到您提供captcha答案——我将使用preg_match。它还需要一些javascript。

如果captcha图像是从javascript生成的,则需要使用相同的cookie或令牌来执行此javascript。在这种情况下,更简单的解决方案是使用例如mozila-fox的livehttpheaders插件来记录头。

使用PHP,我不知道如何做到这一点,你必须获得captcha并找到解决它的方法。它有很多算法可以为你做这件事,但如果你想使用java,我已经从这个链接中破解了源代码,以获得解决captcha的代码,它对很多captcha系统都很有效。

因此,您可以尝试实现自己的captcha求解器,这将花费大量时间,尝试为PHP找到现有的实现,或者,IMHO,最好的选择,使用JDownloader代码库。

最新更新