2014-01-30 2 views
2

Я пытаюсь использовать perl для автоматизации входа на сайт, а затем нажмите ссылку, чтобы получить определенные данные из моей учетной записи. вот точные детали:Проблемы с передачей данных формы с помощью Perl LWP lib

  1. пойти www.bwsc.org и иметь его заполнить информацию счета (номер счета и номер счетчика)
  2. представить форму, которая возьмет меня к базовой учетной записи страницы
  3. следуйте по одной из ссылок на этой странице, чтобы получить конкретную информацию об учетной записи.

Я продолжаю застревать на первых шагах. Возможно, я собираюсь сделать это неправильно, но я подумал, что могу использовать LLP-библиотеку perl для доступа к данным формы и заполнения информации. В качестве первого шага, я посмотрел на соответствующий исходный HTML от www.bwsc.org, чтобы получить информацию формы:.

<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. форма в вопросе не имеет атрибута имя/ID (не уверен, если это имеет значение)
  2. форма использует метод GET
  3. Выездное .txt-файл, содержащий ответ html, не совпадает с html, который я получаю, когда я намеренно неправильно вхожу в систему с помощью браузера. Я имею в виду, что если я использую браузер и не вхожу в учетную информацию, страница с ошибкой в ​​браузере не совпадает с страницей ошибки, которую я получаю при использовании этого скрипта.
+0

Вам необходимо удалить данные своей учетной записи из этого сообщения прямо сейчас! – tangent

+0

Кроме того, свяжитесь с владельцами сайта, чтобы удалить данные учетной записи из истории изменений. – Brilliand

+0

Как иронично, 'security_main.asp' с конфиденциальными данными в строке запроса. – ThisSuitIsBlackNot

ответ

0

Следующий код работает в моем проекте

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; 

попробовать.

+0

я получил мой работать также, выполнив следующие действия: '$ ua-> cookie_jar (
HTTP :: Cookies-> нового ( файла => 'mycookies.txt',' автосохранения => 1 )) ; ' –