免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: rt77789
打印 上一主题 下一主题

用perl和web交互? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-04-17 21:35 |只看该作者

回复 #10 riverlee2008 的帖子

恩,我照那种写法,没有成功。。

论坛徽章:
0
12 [报告]
发表于 2008-04-18 09:04 |只看该作者
关键是你首先要找出来哪些数据是你需要post过去的。
我这个代码里面使用了两种方法,登陆的时候是老老实实的填充了form然后post的。后面备份数据库那里,稍微偷懒了一点,我没有填充form,而是使用抓包工具捕获了数据包,然后作为Content直接提交的。

建议你像我登陆部分那样,分析字段,填充,提交,必要的时候保存cookie。

论坛徽章:
0
13 [报告]
发表于 2008-04-18 14:13 |只看该作者

回复 #12 撒哈拉里的鱼 的帖子

您的blog上不去了。。

论坛徽章:
0
14 [报告]
发表于 2008-04-18 18:18 |只看该作者

以下是我测试的几个方法,均未成功...前辈们帮看看哪里错了

以下是我测试的几个方法,均未成功...前辈们帮看看哪里错了
#! /usr/bin/perl -w
use LWP::Simple;
use URI::URL;
use HTML::Parser;
use Net::SMTP;
$url = url("http://bbs.chinaunix.net/logging.php?action=login");
$url->query_form("formhash" => "eb595b8d", "styleid" => "1", "cookietime" => "0",  "loginfield" => "username", "questionid" => "0", "username" => "username", "password" => "password"); # more params if needed
$page = get($url);
open CP, ">new.html";
print CP $page;

论坛徽章:
0
15 [报告]
发表于 2008-04-18 18:27 |只看该作者

接上

#! /usr/bin/perl -w

  use LWP::UserAgent;

  $ua = LWP::UserAgent->new;

  $ua->agent("MyApp/0.1");

  my $req = HTTP::Request->new(POST => 'http://bbs.chinaunix.net/logging.php?action=login');
  #$req->content_type('application/x-www-form-urlencoded');
$req->content('formhash=eb595b8d&styleid=1&cookietime=0&loginfield=username&questionid=0&username=username&password=password');
  my $res = $ua->request($req);

  if ($res->is_success) {
   open CP, ">new.html";
  print CP $res->content;
  }
  else {
      print $res->status_line, "\n";
  }

论坛徽章:
0
16 [报告]
发表于 2008-04-18 18:33 |只看该作者

接上,希望前辈们不要嫌烦,刚刚起步,有些蹒跚。

#! /usr/bin/perl -w

  use LWP::UserAgent;

my $browser = LWP::UserAgent->new;

my $url = 'http://bbs.chinaunix.net/logging.php?action=login';

my $response = $browser->post( $url,
    {
        "formhash" => "eb595b8d",
         "styleid" => "1",
         "cookietime" => "0",
          "loginfield" => "username",
          "questionid" => "0",
          "username" => "username",
          "password" => "password",
       }
);
  if ($response->is_success) {
   open CP, ">new.html";
  print CP $response->content;
  }
  else {
      print $response->status_line, "\n";
  }

论坛徽章:
0
17 [报告]
发表于 2008-04-22 10:38 |只看该作者
我的blog是好的呀,可以访问,或许那时候出问题了吧。
今天刚好有空来BBS,发现你还没搞定,就写了个简单的脚本。为了方便你阅读代码,我使用了提交表单的方式,没有采用抓包直接post数据。

你需要注意的是,formhash字段是动态生成的,你需要在登陆前动态获取一下。登陆失败时,请尽量多填充字段,也许你认为不重要的,但是服务端却检查了。

  1. #!/use/bin/perl

  2. use strict;
  3. use warnings;
  4. use LWP::Simple;
  5. use LWP::UserAgent;

  6. my $login_url = 'http://bbs.chinaunix.net/logging.php?action=login&';
  7. my $form_hash;

  8. my $user = "撒哈拉里的鱼";
  9. my $pass = 'fake_password';

  10. &GetFormHash( );
  11. &LoginCU( );

  12. sub GetFormHash( )
  13. {
  14.         my $url = 'http://bbs.chinaunix.net/logging.php?action=login';
  15.         my $content = get $url || die "Get form hash error: $!\n";
  16.        
  17.         if( $content =~ /name=\"formhash\" value=\"(.*?)\">/ )
  18.         {
  19.                 $form_hash = $1;
  20.                 print "get form hash ok: $1\n";
  21.         }
  22. }

  23. sub LoginCU( )
  24. {       
  25.         my $ie = LWP::UserAgent->new( );
  26.         $ie->cookie_jar( {} );
  27.        
  28.         my $response = $ie->post( $login_url, [ 'formhash' => $form_hash,
  29.                                                                                         'referer' => $login_url,
  30.                                                                                         'username' => $user,
  31.                                                                                         'password' => $pass,
  32.                                                                                         'questionid' => 0,
  33.                                                                                         'answer' => '',
  34.                                                                                         'cookietime' => 315360000,
  35.                                                                                         'loginmode' => '',
  36.                                                                                         'styleid' => 1,
  37.                                                                                         'loginsubmit' => "提   交" ] );
  38.         if ( not $response->is_success )
  39.         {
  40.                 die "login error: ", $response->status_line. "\n";
  41.         }
  42.             
  43.         if( $response->content =~ /$user/ )
  44.         {
  45.                 print "login successful!\n";
  46.         }
  47.         else
  48.         {
  49.                 die "login error!";
  50.         }
  51. }
复制代码

论坛徽章:
0
18 [报告]
发表于 2008-04-24 14:03 |只看该作者
thx for your help.

论坛徽章:
0
19 [报告]
发表于 2008-04-24 15:30 |只看该作者

回复 #17 撒哈拉里的鱼 的帖子

下午逃课。。。功夫不负有心人,成功了。万分的感谢你~
这里真是太好了,对于我这样的菜鸟,真是有种说不出的兴奋。

论坛徽章:
0
20 [报告]
发表于 2008-04-24 21:06 |只看该作者

回复 #17 撒哈拉里的鱼 的帖子

还想请教下,如果我正常登录了一个网站,然后对于以后的操作都要post过去cookie是把,这里具体的做法还是没有弄明白,最好给个简单事例,谢谢++
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP