Perl写linux网页,perl登录各种网站的原理与实现

perl登录各种网站的原理与实现

tkorays(tkorays@hotmail.com)

小孩子才践行大道理,大人只会讲。

写脚本抓取某个页面内容很简单,但是往往事情没那么简单。有些页面必须是要登录才能查看的,比如你想抓取选课系统中自己的成绩?所以,下面介绍下使用perl登录网站的原理,以及实现。

原理

如果你了解一些http原理的话,这就很好理解了。使用浏览器打开网页无非就是:你发送请求,然后服务器响应,给你所需要的页面内容。当然这些请求和相应都是有一定规律的。

先说浏览器发送请求。

请求常用有POST和GET两种,撇去细节不谈,两者有个很大的区别就是POST传递的参数是不显示在url中,而GET方式传递的参数会在url中显示。而我们登录有表单提交,经常要用POST和GET。比如我在开源中国搜索apache:

20a47eb7b838f7b7470656c47ce9c41b.png

这个表单是GET方式的,所以url中会有参数。

那么,是否浏览器就发送了这么多数据给服务器了呢,答案当然是,否。如上图中,点开头消息,请求头如下:

9c726f9e284ce4e5502511611e1ea84b.png

其实还发送了这些数据,所以如果你要自己用c/c++等实现,不要忘记发送必要的数据哦。(提示,每个数据使用\r\n分割的)如果你使用perl,有现成的库,你不需要关注太多细节的,只需要知道,可能须有cookie!

因此,请求你只需要关注,请求的参数以及可能需要的cookie。

接下来说相应。

同样,浏览器返回的html网页不止是你查看源代码看到的那些,还包括响应头。

7bafae71070ebdba124c3ed7399941d6.png

相应头和请求头差不多,主要高速浏览器该怎么处理这些相应。注意上面的Content-Type没,后面的text/html表示返回的数据是html格式的。(返回javascript时,content-type是application/x-javascript)。当然并不是所有的相应都有响应头,而且大多时候,你也不需要关注它。这里我只是凑字数说说,完全可以忽略。返回的页面,你完全只需要获取头后面的东西(反正你也知道返回的是html还是javascript,何必还判断呢)。

cookies是保存在浏览器端的一些小数据,可以用于保存一些信息。它其实就是一些键值对。很多时候,服务器会生成一些数据给浏览器,这些在之后的通信过程中是很重要的。所幸的是,perl有现成的库供我们管理cookies,如果你要一步步实现,就头大了。

对了,还要注意的是url编码问题,有时候会出现。

实现

说了原理当然要说实现了,不然我就是欺骗读者的感情了。

perl中使用到的主要包有LWP,会用到它的UserAgent、Cookies、Response等类。这些类有不明白的地方可以查看cpan。

这里我们需要模拟一个浏览器的行为,所以要创建一个UserAgent对象。

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

$ua->agent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0");

这样,请求头里面的浏览器就变成了火狐,服务器会以为我们是使用火狐呢。

不能忘记cookies哦。

my $cookie_jar = HTTP::Cookies->new(

file=>'lwp_cookies.txt',

autosave=>1,

ignore_discard=>1);

$ua->cookie_jar($cookie_jar);

之后调用UserAgent的post和get方法,想干什么就干甚么。

如果你看的不是很明白,下面给出一个登录人人并发状态的例子,好好领悟吧。有注释哦:

#!/usr/bin/perl

# Copyright 2014 tkorays. All rights reserved.

# author tkorays

# email tkorays@hotmail.com

use strict;

use warnings;

use LWP;

use LWP::Simple;

use LWP::UserAgent;

use HTTP::Cookies;

use HTTP::Headers;

use HTTP::Response;

use Encode;

use URI::Escape;

use URI::URL;

my $email = '***@**.com';

my $password = '***';

my $domain = 'renren.com';

my $hostid='';

my $requestToken='';

my $rtk='';

my $channel='renren';

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

$ua->agent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0");

my $cookie_jar = HTTP::Cookies->new(

file=>'lwp_cookies.txt',

autosave=>1,

ignore_discard=>1);

$ua->cookie_jar($cookie_jar);

my $login_url = 'http://www.renren.com/PLogin.do';

# 这里面没有判断是否需要验证码,聪明的你学完后肯定知道怎么搞定的

# 人人是post登陆的,第一个参数是登陆的地址,第二个参数是一个匿名hash

my $res = $ua->post($login_url,{

'email'=>$email,

'password'=>$password,

'domain'=>$domain});

my $homepage;

# 判断响应头里面的location,确定是否登陆成功

if($res->header('Location') eq 'http://www.renren.com/Home.do'){

print 'login ok...',"\n";

$homepage = $ua->get('http://www.renren.com/home');

}else{

exit;

}

# 作为福利,下面还是贴上,发状态的吧,后面就不注释了

#####################################

if($homepage->is_success){

my $pagect = $homepage->content;

$pagect =~ /id\s:\s"(\d+)"/g;

$hostid = $1;

$pagect =~ /requestToken\s:\s'(.+)'/g;

$requestToken = $1;

$pagect =~ /_rtk\s:\s'(.+)'/;

$rtk = $1;

}else{

exit;

}

my $purl = 'http://shell.renren.com/'.$hostid.'/status';

my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime();

$year +=1900;

$mon++;

my $postret = $ua->post($purl,{

'content'=>"renren test,by perl script,author:tkorays,date:$year-$mon-$day $hour:$min:$sec.",

'hostid'=>$hostid,

'requestToken'=>$requestToken,

'_rtk'=>$rtk,

'channel'=>$channel});

if($postret->is_success){

print 'send ok...',"\n";

}else{

print 'fuck!';

}

有验证码怎么办?UserAgent的get、方法获取啊。

给个简单的例子吧:

my $res = $ua->get($url.'/GenImg');

if(!$res->is_success){

return 0;

}

open(FILE_HANDLE,'>img.jpg');

binmode FILE_HANDLE;

print FILE_HANDLE $res->content;

close FILE_HANDLE;

上面的代码把验证码存为图片。所以验证码问题就解决了。

GO

问题都解决了,你就赶快行动?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Linux系统下的邮件服务器 "所 在 系 "信息工程系 " "专 业 "网络工程 " "班 级 "B041111 " "学 号 "B04111131 " "姓 名 "于硕 " "指导教师 "牛国新 " "负责教师 "吴兰兰 " 沈阳航空航天大学北方科技学院 2014年6月 摘 要 电子邮件服务由专门的服务器提供。主要的电子邮件服务器主要有基于Postfix/Se ndmail的邮件系统,也是在企业中使用数量最多的邮件系统。其性能可以达到非常高, 而且安全性很好,同时软件是开源免费的。 本套系统采用B/S模式开发,由服务器端和客户端两部分构成。服务器端除了提供最 基本的收发邮件功能之外,它还具有注册新用户、管理用户、群发邮件等功能。客户端 分为普通用户端和管理员端。普通用户端可实现基本的注册、收发邮件,修改个人资料 等功能,管理员端主要实现群发邮件功能,以方便主管领导发送紧急通知,除此之外, 它还可以实现浏览用户信息以及删除用户等操作。 论文从需求分析、系统设计、详细设计、系统调试与测试等方面对系统的设计过程进 行了详细的描述,并对系统待完善之处提出了建议。 关键词:Linux系统;邮件服务;域名解析;服务器 Abstract E-mail service provided by a dedicated server, but the system of large mail service providers are generally developed or to other technology development and implementation of two times. The e-mail server is a mail system based on Postfix/Sendmail. Use the largest number of mail system in enterprise. mail system based on Postfix/Sendmail is in need of a strong technical force to realize, but performance can reach very high, but very good security, and is open source and free software. This system developed based on Browser / Server module, which contains server and client. This system is constituted with server and webmail.The server provides the basic function that user can use it to send and receive mail.Besides,it also provides other functions such as :registering a new account. managing users' information. sending system message. receive and send a mail, reform person's basic message. The administrator can send many mails one time to send vital notice . In addition, the administrator also can view the users' message and delete a user's account. The papers make a detailed description on the process of system design from the aspect of needs anylasis,system design,detailed design,system debugging and testing.For the places which need to be perfect,It offered a suggection. KeyWords :Linux;Sendmail;Bind;Server 目 录 摘 要 I Abstract I 1 绪论 1 1.1课题背景 1 1.2课题目的 1 1.3课题意义 2 1.4国内外发展现状及趋势 2 1.5课题要求 3 2 可行性分析 4 2.1经济可行性分析 4 2.2技术可行性分析 4 2.3操作可行性分析 5 2.4 法律可行性 6 3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值