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

news/2024/5/16 1:17:43/文章来源:https://blog.csdn.net/weixin_33860528/article/details/91918554

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

tkorays(tkorays@hotmail.com)

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


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


原理

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

        先说浏览器发送请求

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

170449_vmH5_616622.jpg

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

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

171034_rdxF_616622.jpg

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

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

        接下来说相应

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

171646_Z7h4_616622.jpg

        相应头和请求头差不多,主要高速浏览器该怎么处理这些相应。注意上面的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

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











转载于:https://my.oschina.net/tkorays/blog/305257

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_701520.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5种方法提高你网站的登录体验

提升用户体验的最好的方法,或者更确切的说让产品更棒,都可以归结为让用户使用产品的整个体验更为简单。而对于如何提升登录过程的体验你有许多可以做的。 这里我们将探讨提升登录过程体验的五种方法,首先会提到两种不同的登录类型&#xff0c…

网站访问慢解决思路详细图解

老男孩老师讲授网站访问慢解决思路思想,感谢21期的李同学图解呈现,此图才能与大家见面!如果看着小,单击还原大图,可清晰查看!本图为亿图制作:亿图使用技巧:http://v.youku.com/v_sho…

《网站设计 开发 维护 推广 从入门到精通》—— 2.3 页面设计创意思维

本节书摘来异步社区《网站设计 开发 维护 推广 从入门到精通》一书中的第2章,第2.3节,作者:何新起 ,娄彦杰,更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.3 页面设计创意思维 一个网站如果想确立自己的形象&#xff0…

awbeci网站之技术篇

之前写的一篇关于awbeci网站的使用和介绍,大家可以看看,地址在:http://www.cnblogs.com/zhangwei595806165/p/5245640.html 1、前台 BootStrap 选择bootstrap的原因是,最近两年bt实在是太火了,而且一些模板设计省了你再…

大型网站的 HTTPS 实践(1):HTTPS 协议和原理

转自:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS。本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义。 2 HTTPS 协议概述 HTTPS 可以认为是 HTTP TLS。HT…

12月国内网站流量统计5强:360安全中心后来居上

IDC评述网(idcps.com)12月31日报道:根据中国互联网协会-中国网站排名公布的最新数据显示,截至2015年12月28日,国内网站独立访问量五强排名依次是百度、360安全中心、腾讯网、搜狗、微博。具体情况如下图所示&#xff1…

26个复古风格网站设计欣赏

复古元素今年不断被提上来,那么今天下面分享的这26个复古元素的网页设计案例使用古典和现代的图形结合而成,还你一个不一样的复古网页设计案例,希望对你有所启发,enjoy!你可能感兴趣的复古网站资讯:《9个国…

开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试

前言表面看来,JMeter与本系列课程似乎关系不大,但实际上在后面的很多场景中起着重要作用:如何获知修改了某些代码或者设置之后系统性能是提升了还是下降了呢?商业的压力测试工具LoadRunner确实很高大上,但是据说费用也…

14款优秀的代码展示网站

本文列出的这些网站可以分享和展示你的代码。它们都提供在线预览功能,所以别人可以看到你的代码如何运行。它们有时候也被称作“代码广场”或者“沙箱”。 它们不仅仅提供简单的代码展示功能,还提供很多代码协作和实际编程过程会用到的功能。例如&#x…

VS Code 调试Node.js express网站

VS Code是微软出品的一款跨平台的轻量级的Editor,我就不宣传了,想了解的自己去搜吧,总之我很喜欢。 下载地址:https://code.visualstudio.com/ 安装完成侯应该是自动加到环境变量里了吧,不记得了,如果没有自…

使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置

原文:使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置摘要 讲解在IntelliJ IDEA中,如何进行Mysql数据库的配置 目录[-] 文章已针对IDEA 15做了一定的更新,部分更新较为重要,请重新阅读文章并下载最新源码。六、数据…

织梦手机网站建设 并配置二级域名

现在手机站很流行,如何用织梦程序建手机站并实现数据同步呢?我们都知道通过开发实现数据同步还是比较麻烦的,咱们就来说下利用织梦自动的手机wap浏览是如何实现手机网站建设并配置二级域名的。首先为织梦安装手机wap浏览模块:找到…

如何管理网站后台

2019独角兽企业重金招聘Python工程师标准>>> 网站上传,域名主机申请后,接着就是管理 这里以实验中心网络后台管理为例: 1 概述 实验中心网络平台管理员后台主要包括:系统参数设置(网站参数管理、计数器初始…

快速生成apk 自动发布到网站 便于测试

遇到的问题: 开发者生成的apk 需要不断给 测试安装让他们测试。有没有脚本自动将最新apk上传到服务器,让测试自己安装测试呢?mac电脑 怎么自己搭建文件服务器 启动Tomcat功能在这里不在赘述,有不懂的请你多多百度和Google 然后把你的localh…

5首页加载慢_5个 外贸建站谷歌SEO优化技巧

外贸建站谷歌SEO优化技巧 想必是每个外贸建站人员真正关心并且想要熟练掌握的一门学问。同学们可能在很多网站或者博客上看到过相同标题的博客文章,这些文章质量参差不齐内容多种多样,所表达的观点和相关技巧难免会存在一些作者的个人观点。所以当你看了…

获取网站状态码

2019独角兽企业重金招聘Python工程师标准>>> curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" 域名 例子: vim httpstatus.sh #!/bin/bash echo -n "please your domain name: " read domain curl -I -m 10 -o /dev/null -s -w…

大型网站架构系列:缓存在分布式系统中的应用(二)

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。本文是缓存在分布式应用第二篇文章,介绍分布式缓存,Memcache,Redis,本地缓存&…

查看网站上保存的密码

Chrome有个保存账户的功能,点击保存网站账号密码,浏览器下次就记住你的号码了,自己的电脑上这样用很爽,每次点击登录按钮就可以了。但是问题来了,有一天你想在另外一台电脑上登录,忘记密码了。自己电脑上的…

从SEO效果看谷歌百度360搜狗有道bing技术现状

为什么80%的码农都做不了架构师?>>> 从SEO效果看谷歌百度360搜狗有道bing技术现状声音 maybe yes 发表于2015-08-20 16:52 原文链接 : http://blog.lmlphp.com/archives/140/From_the_effect_of_the_SEO_to_see_the_Search_Engine_Company_Google_Baidu…

Mozilla新特性只支持https网站

Mozilla的官方博客2015.4.30正式宣布了淘汰HTTP的方案。其中包括:设定一个日期,所有的新特性将只提供给HTTPS网站;HTTP网站将逐步被禁止访问浏览器功能,尤其是那些与用户安全和隐私相关的功能。Mozilla此举是向Web开发者社区发出一…