Mojolicious学习笔记-Mojo::UserAgent-2015-02-05

来源:互联网 发布:win7 补丁 软件 编辑:程序博客网 时间:2024/05/16 09:13

最近用 Mojo::UserAgent写了一个程序抓取一个网页的内容。

下面是学习过程中遇到的疑惑:

1. 不想使用默认的User-Agent名称,如何更改?

可以通过Fiddler查看浏览器发request 时它的request header里面User-Agent的名称,然后通过来$ua->transactor->name('xxxxx');设置

下面的例子是把User-Agent的名称设置成Chrome的 User-Agent名称。

$ua->transactor->name('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36');


2. 网站需要输入用户名、密码来验证,如何设置cookie_jar 来存放登录后得到的Cookies ?

不需要显式设置cookie_jar,Mojo::UserAgent 默认情况下会自动从Response中把Cookie取出来放到cookie_jar中,下面代码片段中的注释部分可以验证response中的Cookie确实是被取出来存到cookie_jar中了。

use Mojo::UserAgent;my $ua = Mojo::UserAgent->new;<pre name="code" class="plain">$ua->transactor->name('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36');
my $login_url = "http://example.com/login";my $post_form = {...}my $tx = $ua->post( $login_url => form => $post_form );if ( $tx->success ) { say "Logged in"; #below is to dump out what cookies are stored in the cookie jar. #my @cookies = $ua->cookie_jar->all; #for my $cookie (@cookies) { #say $cookie->to_string; #}}else { say 'Log-in failed,please try again.';}


3. Mojo::UserAgent文档中有下面的一句话,我要访问的网站也做了很多次redirects,但是设置了max_redirects后怎么没有起作用啊?

# Follow redirects to grab the latest Mojolicious release :)
$ua->max_redirects(5)
  ->get('https://www.github.com/kraih/mojo/tarball/master')
  ->res->content->asset->move_to('/Users/sri/mojo.tar.gz');

通过Fiddler及查看网页源文件,发现我要访问的网站很多redirect其实是通过Javascript来触发了,浏览器可以执行Javascript,但是Mojo::UserAgent,LWP::UserAgent之类的是不会(应该是也没有这个能力)去执行Response中的Javascript的,如果是response中正常的302 redirect,Mojo::UserAgent就能正常follow了。


4. 我访问的是https页面,需要做什么特殊的设置吗?

如果该网站不需要你提交个人证书去验证身份,那么就不需要特殊设置什么东西。大多数网站是不需要你提供个人证书进行验证的。

0 0
原创粉丝点击