【问题标题】:Form authentication for . NET sites using Perl表单身份验证。 NET 网站使用 Perl
【发布时间】:2015-04-22 06:36:22
【问题描述】:

我们是 Perl 脚本的新手,我们希望通过 .NET 站点身份验证。 我们有一个现有的特定于 Sharepoint 站点的身份验证代码,代码 sn-p 如下:

my $ua = new LWP::UserAgent('keep_alive' => '1');
print "$url \n";
$ua->credentials("$uname", "$pwd");
my $response =$ua->get($url);
my $cde = $response->code();

我们希望自定义代码,使其适用于特定的 .NET 站点身份验证。我们使用了 WWW::Mechanize,见下面的代码 sn-p:

my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech->get($url);
$mech->form_name('Login');
$mech->field("UserName", $username);
$mech->field("Password", $password);
$mech->click();

但是当程序运行时,显示错误:“sample.pl 中没有名为'Login'的表单”。关于如何验证特定于 .NET 站点的表单的任何想法?

添加:HTML表单代码sn-p...

<div id="loginArea">        
        <div id="loginMessage" class="groupMargin">Sign in with your account</div>
        <form method="post" id="Login" autocomplete="off" novalidate="novalidate" onkeypress="if (event &amp;&amp; event.keyCode
== 13) Login.submitLoginRequest();" action="">
            <div id="formsAuthenticationArea">
                <div id="userNameArea">
                    <input id="userNameInput" name="UserName" type="email" value="" tabindex="1" class="text fullWidth" spellcheck="false" placeholder="Username" autocomplete="off">     
                </div>
                <div id="passwordArea">
                     <input id="passwordInput" name="Password" type="password" tabindex="2" class="text fullWidth" placeholder="Password" autocomplete="off">                            

                </div>
                <div id="kmsiArea" style="display:none">
                    <input type="checkbox" name="Kmsi" id="kmsiInput" value="true" tabindex="3">
                    <label for="kmsiInput">Keep me signed in</label>
                </div>
                <div id="submissionArea" class="submitMargin">
                    <span id="submitButton" class="submit" tabindex="4" onkeypress="if (event &amp;&amp; event.keyCode == 32) Login.submitLoginRequest();" onclick="return Login.submitLoginRequest();">Sign in</span>
                </div>
            </div>
        </form>
    </div>

【问题讨论】:

    标签: forms perl authentication mechanize lwp


    【解决方案1】:

    此代码通常适用于 .NET 网站:

    $mech->submit_form(
        with_fields => {
            login => "somelogin",
            pass  => "somepass",
        },
        button => "submit_button_name",
    );
    

    但是您收到奇怪的错误消息:您正在选择“登录”表单,但 $mech 正在搜索“登录表单”...您可以显示实际表单的 HTML 吗?

    也不需要$mech-&gt;cookie_jar(...),因为$mech默认会这样做。

    更新 试试这个代码(Login 是您表单的 id,但不是 name):

    $mech->submit_form(
        with_fields => {
            UserName => "somelogin",
            Password  => "somepass",
        },
    );
    

    【讨论】:

    • 感谢@gangabass。抱歉,由于我是 stackoverflow 的新手,所以我无法发布实际表单的屏幕截图,而且我没有足够的声望点。登录表单就像您可以在 Web 上看到的典型登录表单:用户名和密码两个文本字段。还有一个名为“登录”的按钮。我还编辑了错误消息,表单名称为“登录”。
    • @Charli 我谈到了表单的 HTML 代码,而不是屏幕截图。
    • 如果我只发布 HTML 表单的代码 sn-p 可以吗?
    • @Charli 是的,这就是我所需要的
    • 嗨@gangbass,我在上面的原始问题中添加了HTML表单代码sn-p,因为在这里发布太长了。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多