【问题标题】:having trouble passing form data using perl LWP lib使用 perl LWP lib 传递表单数据时遇到问题
【发布时间】:2014-02-23 10:59:11
【问题描述】:

我正在尝试使用 perl 自动登录到网站,然后让它单击链接以从我的帐户中获取某些数据。以下是具体细节:

  1. 去www.bwsc.org 填写账号信息(账号和电表号)
  2. 提交表单,该表单将带我进入基本帐户页面
  3. 点击此页面上的链接之一以获取特定帐户信息

我一直卡在第一步。也许我做错了,但我认为我可以使用 perl LWP lib 来访问表单数据并填写信息。作为第一步,我查看了来自 www.bwsc.org 的相关源 html 以获取表单信息:

<div id="logonbox_SB">               
        <form action="/ACCOUNTS/security_main.asp" method="get">
        <div id="FS_1">
        <label for="AcctNum" id="acctnum_label">Account Number</label> 
        <input name="AcctNum" type="text" class="formtext1" size="9" maxlength="9" />
        </div>
        <div id="FS_2">
        <label for="MtrNum" id="accsnum_label">Access Number</label>
        <input name="MtrNum" type="text" class="formtext2" size="4" maxlength="4" />
        </div>
        <input type="image" value="Submit" name="search" class="boxsubmitbtn" src="/images/buttons/login.gif" alt="Login">
        </form>

        <p><a href="/ACCOUNTS/accounts.asp">Need help logging in?</a> </p>

</div><!--end logonbox_SB-->

AcctNum 和 MtrNum 文本字段是我需要填写的。下面是我编写的代码:

#! /usr/bin/perl

use strict;
use LWP::UserAgent;
use HTTP::Request::Common;

my ($ua, $request, $response, $content);
$ua = LWP::UserAgent->new;

$request = new HTTP::Request('GET','http://www.bwsc.org/ACCOUNTS/security_main.asp?AcctNum=XXX&MtrNum=XXX' );
$response = $ua->request($request);

my $content = $response->content;

open(FILE, ">out.txt");
print FILE $content;
close(FILE);

如果我查看输出文件 out.txt(我认为它应该包含响应 html),它只会给我一个错误页面的 html,说我没有提供有效的帐户信息。我不确定我做错了什么。按照 cpan 文档的建议,我尝试了各种方法来传递参数,但没有运气。

注意事项:

  1. 有问题的表单没有 name/id 属性(不确定这是否重要)
  2. 表单正在使用get方法
  3. 包含响应 html 的 out.txt 文件与我故意使用浏览器错误登录时收到的 html 不同。我的意思是如果我使用浏览器并且不输入任何帐户信息,浏览器中的错误页面与我使用此脚本时收到的错误页面不同。

【问题讨论】:

  • 您需要立即从该帖子中删除您的帐户详细信息!
  • 另外,请联系网站所有者,从编辑历史记录中删除您的帐户详细信息。
  • 讽刺的是,security_main.asp 在查询字符串中包含敏感数据。
  • 在从浏览器和脚本登录时,您是否尝试过嗅探您的 HTTP 流量?这两种情况有何不同?如果您从 Perl 和您的浏览器发出完全相同的请求,服务器必须返回相同的响应。
  • 还可以尝试将 &amp;search=Submit 附加到 URL。它肯定是从浏览器发送的。

标签: html forms perl lwp


【解决方案1】:

以下代码在我的项目中有效

use HTTP::Headers;
use LWP::UserAgent

my $headers = HTTP::Headers->new('Accept-Encoding' => 'gzip');

my $useragent = LWP::UserAgent->new(agent => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36', timeout => 20, keep_alive => 100, default_headers => $headers );

my $url = 'http://www.bwsc.org/ACCOUNTS/security_main.asp?AcctNum=XXX&MtrNum=XXX';

my $response = $useragent->get($url);

my $content = $response->content;

试试看。

【讨论】:

  • 我也通过执行以下操作让我的工作:$ua-&gt;cookie_jar( &lt;br&gt; HTTP::Cookies-&gt;new( file =&gt; 'mycookies.txt', autosave => 1 ));`
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 2019-11-16
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
相关资源
最近更新 更多