Невозможно установить флажок через 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.

Другие вопросы по тегам