Html 登录到网页后传递自动直接页面

Html 登录到网页后传递自动直接页面,html,perl,httprequest,lwp,Html,Perl,Httprequest,Lwp,我已通过下面的脚本成功登录到一个网页,但该网页仍停留在重定向页面。我不知道如何通过它。下面是我的代码 use strict; use warnings; use LWP::UserAgent; use HTTP::Request::Common qw(POST); use HTTP::Cookies; my $URL="http://www.redirect.com"; my $UA = LWP::UserAgent->new(); $UA->ssl_opts( verify_ho

我已通过下面的脚本成功登录到一个网页,但该网页仍停留在重定向页面。我不知道如何通过它。下面是我的代码

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use HTTP::Cookies;

my $URL="http://www.redirect.com";
my $UA = LWP::UserAgent->new();
$UA->ssl_opts( verify_hostnames => 0 ); 


my $req =HTTP::Request::Common::POST("$URL",
Content_type=>'form-data',
Content =>[
     'username'=>'name',
     'password'=>'pass',
]
);



my $resp=$UA->request($req);

if ($resp->is_success) {
    my $res2 = $UA->post($resp->base, []);
    open(OUTFILE1, ">html1.txt"); 
    print OUTFILE1 $res2->decoded_content;

    if ($res2->is_success) {

        if( ($resp->code() >= 200) && ($resp->code() <400) ) {

            open(OUTFILE, ">html.txt");
            binmode(OUTFILE, ":utf8");    
            print OUTFILE $resp->decoded_content;

        }else{
            print "Error: ". $resp->status_line. "\n";
        }
    }
}

我不知道这是什么意思。有人能帮忙吗?

关于这一点,有趣的部分可能是标题。一个普通的网站会发出一个重定向状态码,比如。但这里显然不是这样,否则他们就不需要这种奇怪的HTML了

HTML具有内置的JavaScript执行

<BODY onLoad="document.AUTOSUBMIT.submit();">
表单没有参数。唯一的
元素是submit按钮,因为它没有
name
属性,所以它不会显示为参数。URL可能与您最初提交的URL相同,但它可能已经执行了真正的重定向,因此最好使用响应对象的
base
属性



我真想知道为什么他们让这个过程如此奇怪。它当然没有授权任何事情。它可能会设置额外的cookies,比如一个营销重定向的东西,但从您展示的内容中看不到。而且它也不会停止自动化。

关于这一点,有趣的部分可能是标题。一个普通的网站会发出一个重定向状态码,比如。但这里显然不是这样,否则他们就不需要这种奇怪的HTML了

HTML具有内置的JavaScript执行

<BODY onLoad="document.AUTOSUBMIT.submit();">
表单没有参数。唯一的
元素是submit按钮,因为它没有
name
属性,所以它不会显示为参数。URL可能与您最初提交的URL相同,但它可能已经执行了真正的重定向,因此最好使用响应对象的
base
属性




我真想知道为什么他们让这个过程如此奇怪。它当然没有授权任何事情。它可能会设置额外的cookies,比如一个营销重定向的东西,但从您展示的内容中看不到。而且它也不会停止自动化。

您的输出中缺少一个开头
表单
标记的
。是真的丢失了,还是在复制时丢失了?这是一个正确的302响应。它告诉你它被重定向了。您的LWP用户代理应该自动执行此操作。谢谢@simbabque,如果成功,为什么程序不进入
if($res2->is success)
循环?代码不会打印
html.txt
@simbabque,我需要的最终结果是打印出
www.redirect.com
中的内容。我怎么做?非常感谢您的帮助您在打开
表单
标记的输出中缺少一个
。是真的丢失了,还是在复制时丢失了?这是一个正确的302响应。它告诉你它被重定向了。您的LWP用户代理应该自动执行此操作。谢谢@simbabque,如果成功,为什么程序不进入
if($res2->is success)
循环?代码不会打印
html.txt
@simbabque,我需要的最终结果是打印出
www.redirect.com
中的内容。我怎么做?非常感谢您的帮助Tanks@simbabque,我按照您的建议编辑代码,但这是输出。我修改正确了吗。我编辑了上面的代码。@Tim你也更新了输出吗?您应该尝试在第二个请求中发送什么。查看URL是否正确。您好@simbabque,第二个请求失败,因此代码将在不进入打印输出文件的if循环的情况下结束。@Tim您是否尝试过调试它?输出请求和响应,查看标题。或者使用LWP::ConsoleLogger::Everywhere将整个通信转储到控制台,然后将其与浏览器的工作方式进行比较。感谢您的回复,我已尝试对其进行调试,并按上述方式编辑我的问题。打印出来的
$res2
$resp
不同,我不知道这是什么意思。谢谢@simbabque,我按照你的建议编辑了我的代码,但这是输出。我修改正确了吗。我编辑了上面的代码。@Tim你也更新了输出吗?您应该尝试在第二个请求中发送什么。查看URL是否正确。您好@simbabque,第二个请求失败,因此代码将在不进入打印输出文件的if循环的情况下结束。@Tim您是否尝试过调试它?输出请求和响应,查看标题。或者使用LWP::ConsoleLogger::Everywhere将整个通信转储到控制台,然后将其与浏览器的工作方式进行比较。感谢您的回复,我已尝试对其进行调试,并按上述方式编辑我的问题。打印出来的
$res2
$resp
不同,我不知道这是什么意思。
<BODY onLoad="document.AUTOSUBMIT.submit();">
my $res = $ua->request($req);
if ($res->is_success) {
    my $res2 = $ua->post($res->base, []);
    if ($res2->is_success) {
        ...
    }
}