Невозможно установить флажок через Perl LWP::UserAgent
Как я должен проверить флажок, как это:
<td><center><INPUT name="test2%40mydomain.com_notmetoo" type="CHECKBOX" value="off" ></center></td>
с модулем Perl LWP::UserAgent?
Этот код этого не делает (вывод такой, как если бы он был отправлен без флажка - т.е. веб-страница обновляется и флажок сбрасывается).
#!/usr/bin/perl
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->cookie_jar({ file => "$ENV{HOME}/.mailmanrc" });
$res = $ua->post('http://mydomain.com/mailman/admin/test1_mydomain.com/members/list',
Content_Type => 'form-data',
Content => [
'test2%40mydomain.com_notmetoo' => 'on',
setmemberopts_btn => 'Submit Your Changes'
]
);
if ($res->is_success) {
print $res->decoded_content;
print "Changed user setting...I hope!\n";
}
else {
die $res->status_line;
}
Я не уверен, почему "@" представлен как "%40" в названии элемента (есть идеи?), Но я также пытался:'test2 \% 40mydomain.com_notmetoo' => 'on' и'test2@mydomain.com_notmetoo' => 'on', но безуспешно.
Кажется, на сайте нет JavaScript (т.е. он отлично работает в моем браузере с отключенным JavaScript). Я просто не могу заставить его работать в Perl.
Благодарю.
Терри.
Обновление № 1: Вот значение POSTDATA из расширения 'Tamper Data' в Firefox, когда я отправляю после проверки флажка notmetoo в Test2:
POSTDATA =-----------------------------2921376274802
Content-Disposition: form-data; name="findmember"
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_realname"
Test1
-----------------------------2921376274802
Content-Disposition: form-data; name="user"
test1%40mydomain.com
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_hide"
on
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_notmetoo"
on
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_plain"
on
-----------------------------2921376274802
Content-Disposition: form-data; name="test1%40mydomain.com_language"
en
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_realname"
Test2
-----------------------------2921376274802
Content-Disposition: form-data; name="user"
test2%40mydomain.com
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_hide"
on
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_notmetoo"
off
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_plain"
on
-----------------------------2921376274802
Content-Disposition: form-data; name="test2%40mydomain.com_language"
en
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_realname"
Test3
-----------------------------2921376274802
Content-Disposition: form-data; name="user"
test3%40mydomain.com
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_hide"
on
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_plain"
on
-----------------------------2921376274802
Content-Disposition: form-data; name="test3%40mydomain.com_language"
en
-----------------------------2921376274802
Content-Disposition: form-data; name="setmemberopts_btn"
Submit Your Changes
-----------------------------2921376274802
Content-Disposition: form-data; name="allmodbit_val"
0
-----------------------------2921376274802--
Помогает ли это кому-нибудь помочь мне?
2 ответа
Я понимаю, что флажки value=
указывает значение, которое будет иметь переменная при установке флажка. Так что вы сбиваете с толку value="off"
на самом деле означает, что вам нужно
'test2%40mydomain.com_notmetoo' => 'off'
Чтобы указать, что флажок установлен.
В вашем случае флажок будет иметь значение "выкл", когда установлен. Это было бы менее запутанным, если значение является чем-то вроде value="checkbox1"
, В этом случае значение флажка будет checkbox1
когда проверено.
Также рассмотрите возможность использования WWW::Mechanize
для базовых веб-операций, подобных этой (без javascript), она намного проще и понятнее, а также WWW::Mechanize
это подкласс LWP::UserAgent
так что вы все еще можете использовать методы LWP.