ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

buntu安装WPS踩坑实录:wget下载403、deb文件损坏?一文解决动态签名防盗链问题

buntu安装WPS踩坑实录:wget下载403、deb文件损坏?一文解决动态签名防盗链问题

Ubuntu安装WPS Office踩坑记录:解决wget下载403、deb文件损坏问题

一、问题背景

最近在 Ubuntu 系统上安装 WPS Office,按照网上教程直接使用wget下载官方 Linux 安装包。

执行:

wgethttps://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11719/wps-office_11.1.0.11719_amd64.deb 结果出现: HTTP request sent, awaiting response...403Forbidden ERROR403: Forbidden. 随后又尝试了一些网上提供的下载地址,虽然成功生成了: wps-office.deb 但是安装时:sudodpkg-iwps-office.deb 出现错误: dpkg-deb: error: wps-office.deb is not a Debianformatarchive 说明下载的文件并不是一个有效的 Debian 安装包。 二、排查问题:下载的deb文件是真的吗? 首先查看文件大小:ls-lhwps-office.deb 发现: -rw-rw-r--1user user 31K wps-office.deb 正常情况下,WPS Office Linux 安装包通常在几百 MB 左右。 而当前文件只有:31KB 基本可以判断: 下载到的不是安装包,而是服务器返回的错误页面或者网页内容。 进一步验证:filewps-office.deb 正常的安装包应该显示: Debian binary package 如果显示: HTML document 说明下载失败。 三、寻找WPS官方真实下载地址 打开 WPS Linux 官方页面: https://linux.wps.cn/ 发现下载按钮并不是普通的文件链接。 普通下载方式:<ahref="xxx.deb">而 WPS 页面:<ahref="#"onclick="downLoad(...)">说明: WPS 下载过程由 JavaScript 动态控制。 四、分析网页源码获取下载逻辑 首先保存网页:wget-Owps.html https://linux.wps.cn/ 搜索关键内容:grep-E"wps-office|wpscdn|Linux2023"wps.html 发现: downLoad('https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb')看起来已经找到了真实下载地址。 但是直接执行:wgetxxx.deb 依然返回:403Forbidden 说明: 文件地址存在,但是访问缺少认证信息。 五、发现WPS使用动态签名防盗链机制 继续查看网页中的 downLoad()函数:functiondownLoad(url,eventType,eventName){var secrityKey="7f8faaaa468174dc1c9cd62e5f218a5b";var timestamp10=Math.floor(new Date().getTime()/1000);var md5hash=CryptoJS.MD5(secrityKey + uri + timestamp10);url+='?t='+timestamp10+'&k='+md5hash}可以看到: WPS 下载链接实际上会动态添加两个参数: ?t=时间戳&k=MD5签名 也就是说: 原始地址: xxx.deb 无法直接访问。 真实地址: xxx.deb?t=时间戳&k=签名 六、手动生成下载链接1. 获取当前时间戳 执行:date+%s 得到:17859099652. 生成MD5签名 签名规则: MD5(密钥 + 文件路径 + 时间戳)其中: 密钥: 7f8faaaa468174dc1c9cd62e5f218a5b 文件路径: /wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb 执行:echo-n"7f8faaaa468174dc1c9cd62e5f218a5b/wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb1785909965"|md5sum 得到: e650527f53f503c8d80a9df760decadc 七、最终下载命令 将时间戳和 MD5 签名拼接:wget-Owps-office.deb"https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb?t=1785909965&k=e650527f53f503c8d80a9df760decadc"此时开始正常下载。 八、安装WPS Office 下载完成后检查:ls-lhwps-office.deb 确认文件大小: 几百MB 然后安装:sudodpkg-iwps-office.deb 如果提示缺少依赖:sudoapt-finstall再次执行:sudodpkg-iwps-office.deb 启动: wps 即可打开 WPS Office。 九、问题总结 这次安装失败的根本原因: 不是 Ubuntu 系统问题,也不是wget命令问题。 而是: WPS Linux 下载采用了动态签名机制,直接访问文件地址会被 CDN 拒绝。 整个过程如下: wget下载 ↓403Forbidden ↓ 检查文件大小 ↓ 发现下载的是错误页面 ↓ 分析WPS网页源码 ↓ 发现JS动态生成下载链接 ↓ 找到MD5签名算法 ↓ 生成带t和k参数的真实URL ↓ 成功下载
返回列表