You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Perl实现带JS加密逻辑的网站自动登录功能

Perl实现目标站点自动登录方案

你不需要引入JS运行环境即可完成登录逻辑复现,JS代码中调用的md5()为标准MD5哈希算法,直接使用Perl原生模块即可实现:

  • 实现步骤:
    1. 用WWW::Mechanize请求登录页面,提取submitForm表单中隐藏字段nonceA的实时值,该值为服务端生成的一次性校验值,每次访问登录页都会更新,不可硬编码使用
    2. 按照JS逻辑拼接待加密字符串:用户名 + ":" + 密码 + ":" + nonceA值
    3. 对上述字符串计算MD5十六进制哈希值
    4. 构造最终提交的encoded参数值:用户名 + ":" + 上一步得到的MD5哈希值
    5. 向submitForm的提交地址发送POST请求,携带encoded、nonceA、URL三个参数即可完成登录
  • 参考代码:
use strict;
use warnings;
use WWW::Mechanize;
use Digest::MD5 qw(md5_hex);

# 初始化爬虫对象
my $mech = WWW::Mechanize->new(autocheck => 1);

# 替换为实际登录页面地址
my $login_page_url = 'https://你的站点登录页地址';
$mech->get($login_page_url);

# 提取服务端返回的nonceA值
my $nonceA = $mech->value('nonceA');

# 替换为实际账号密码
my $username = 'admin';
my $password = '你的登录密码';

# 计算MD5哈希
my $raw_hash_str = $username . ':' . $password . ':' . $nonceA;
my $md5_result = md5_hex($raw_hash_str);

# 构造encoded参数
my $encoded_param = $username . ':' . $md5_result;

# 提交登录请求
$mech->submit_form(
    form_name => 'submitForm',
    fields => {
        encoded => $encoded_param,
        nonceA => $nonceA,
        URL => '/'
    }
);

# 输出登录后页面内容验证结果
print $mech->content;
  • 异常排查:
    • 如果提交后提示密码错误,先确认站点JS的MD5输出为大写还是小写,若为大写则将md5_hex($raw_hash_str)替换为uc(md5_hex($raw_hash_str))即可
    • 若表单未设置name属性,可通过form_number参数指定表单序号提交

内容的提问来源于stack exchange,提问作者Tomek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:30:04