免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3201 | 回复: 4
打印 上一主题 下一主题

关于Fork()的应用处理,(附源码),请教. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-24 03:43 |只看该作者 |倒序浏览
目的: 自动提交表单(有验证码识别):


  1. my $url='http://www.123.com';    #提交的URL
  2. my $img_url='http://www.123.con/code.asp';   #验证码URL,图片刷新变化

  3. 首先我做的:
  4. 1:直接读取图片URl,分析图片,得到验证码 .
  5. 2:加上验证码.提交表单

  6. Post了之后,查看了$response->content网页源代码,发现提示我验证码输入错误..   提交失败

  7. 验证码识别部分我反复测试了,识别出来的验证码是100%正确.(图片比较简单,比较好分析)
  8. 后来想了下.应该是我下载图片URL的验证码,与我提交表单时候的验证码图片不一致所造成的 .

  9. 后来觉得思路应该是:
  10. 1:浏览需要提交的网页 ,
  11. 2:同步分析验证码图片,并返回分析之后的验证码.           // 这部分我不知道怎么完成 ..
  12. 3:带上验证码,提交表单

  13. 现在问题是我浏览网页以及提交表单用的是LWP模块,分析验证码是用wget $img_url下载图片 ,然后本地分析并返回验证码的 .

  14. 我想问下这个同步应该是怎么来完成的,因为如果不同步的话.下载分析图片的验证码和提交时候的验证码不一致.图片是刷新变化的 .



  15. 目前我做的:

  16. my $pid;
  17. my $num;
  18. if($pid=fork()) {
  19.    # .. 浏览网页
  20.    #  休息 5秒
  21.    
  22.    ...
  23.    # ..提交表单
  24. }
  25. elsif(defined($pid) {
  26.    #Call 分析验证码函数 .
  27.    #return $num; 返回验证码
  28. }   

  29. 但是还是提示出错. 我想知道这个思路是不是错的..  或者是我代码写错了 ?

复制代码


   祝各位大大新年快乐哈  ! ..  5555

论坛徽章:
0
2 [报告]
发表于 2007-02-24 04:29 |只看该作者

楼主的思路不对

LWP和wget是两个不同的进程,就好象两个用户,一个下载验证码图象,给另一个输入验证。
不管怎么说,cookie就对不上号。可能还要考虑Referral Page。

论坛徽章:
0
3 [报告]
发表于 2007-02-24 22:36 |只看该作者
原帖由 skrypto 于 2007-2-24 04:29 发表
LWP和wget是两个不同的进程,就好象两个用户,一个下载验证码图象,给另一个输入验证。
不管怎么说,cookie就对不上号。可能还要考虑Referral Page。


那我想问下, 如果我想分析过验证码之后再提交表单.  应该怎样处理比较好  ..

论坛徽章:
0
4 [报告]
发表于 2007-02-25 16:41 |只看该作者
原帖由 skrypto 于 2007-2-24 04:29 发表
LWP和wget是两个不同的进程,就好象两个用户,一个下载验证码图象,给另一个输入验证。
不管怎么说,cookie就对不上号。可能还要考虑Referral Page。


一朋友说加上COOKIES, 但我加上也没效果 ..
另外我把wget下载更改成LWP下载.. 但还是出错
图片验证部分我保证是100%的命中 ..  

#!/usr/bin/perl
use Encode qw/encode decode from_to/;
use strict;
use warnings;
use LWP;
use HTTP::Cookies;
use LWP::Simple;

my $num;      #识别出来的验证码
my $browser=LWP::UserAgent->new;
my $new_agent='Mozilla/5.0';
$browser->agent($new_agent);
my $response;
$browser->cookie_jar(HTTP::Cookies->new(
                              'file'=>'FanFan.ck',
                              'autosave'=>1));

my $url='http://www.123.net/blog.asp?ID=159';      #浏览提交的网页
$response=$browser->post($url);
push @{$browser->requests_redirectable},"POST";

my $post_url='http://www.123.net/blogcm.asp?action=post';   #表单POST提交URL
my $img_url='http://www.123.net/code.asp';                         #图片URL
my $fanfan;
$fanfan=get_img_num($img_url);       #获取验证码

$response=$browser->post($post_url,
                    [
                                 ......
                    code=>$fanfan,
                    replysubmit=>' 提交 ',
                    ]
                    );

#print $response->content,"\n";
my $utf_data = encode("gb2312", decode("utf8", $response->content));
print $utf_data;   

##获取验证码函数
sub get_img_num
{
          my $urls= shift();
my $name='ad.gif';
getstore($urls,$name);          #下载图片
        ......

return $num;              #返回验证码
}

[ 本帖最后由 饭饭 于 2007-2-25 16:47 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-02-26 02:59 |只看该作者
构筑http GET验证码图象的Request时,有没有用Referer=<显示图象的网页的URL>?

最重要的是要摸清服务器产生验证码所用的所有参数,session id 和Referer只是常见的参数。

不过验证码要是可以用简单程序识别的话,那个网站也没有什么价值吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP