java解析蓝奏云直连(解析真正文件地址)

2023-11-12

使用htmlunit解析蓝奏云直连

前言

最近有个需求,客户端需要更新软件版本,我一直在用蓝奏云,觉得是个非常不错的网盘,可是如果用户自己打开连接选择下载方式很麻烦,用过蓝奏的朋友都知道,打开外链还要选择普通下载-电信下载-联通下载。很麻烦,于是乎,我想到一个办法,把更新的文件上传到网盘,使用java解析出真正的文件地址,让客户端后台创建下载任务,嘿嘿。

分析

我这里放一个jar包测试,外链地址为:https://wwe.lanzous.com/iSb3Deaa3bi
在这里插入图片描述
可以看到,这是一个永久下载地址,固定不变的,打开这个链接。
在这里插入图片描述
点击下载会发现,下载地址固定时间会变化一次,现在按F12进入浏览器调试,选择Network,会发现一个ajaxm.php,点击它,进入Response,会发现一窜json数据,没错,这就是我们我们想要的,复制到浏览器打开会创建一个下载任务。
在这里插入图片描述
现在需要做的就是通过java解析拿到这个json数据。

=======废话不多说,直接上代码

使用框架(htmlunit)

maven地址

		<dependency>
            <groupId>net.sourceforge.htmlunit</groupId>
            <artifactId>htmlunit</artifactId>
            <version>2.41.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.71</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>

先创建一个浏览器

public class Browser {
    private static volatile WebClient webClient=null;
    private Browser(){
        WebClient webClient=new WebClient();
        webClient.getOptions().setJavaScriptEnabled(true);
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setActiveXNative(false);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
    }
    public static WebClient getWebClient(){
        if(webClient==null){
            synchronized (Browser.class){
                if(webClient==null){
                    webClient=new WebClient();
                }
            }
        }
        return webClient;
    }
}

Resolve.java

public class Resolve {
    private WebClient webClient;
    //蓝奏云外链地址
    private String path;
    public Resolve(){}

    public Resolve(String path) {
        this.path = path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public void init() throws IOException {
        webClient=Browser.getWebClient();
        //监听资源加载,这里的WebConnectionWrapper会监听所有资源加载
        webClient.setWebConnection(new WebConnectionWrapper(webClient){
            @Override
            public WebResponse getResponse(WebRequest request) throws IOException {
                WebResponse response = super.getResponse(request);
                String data=response.getContentAsString();
                //过滤得到下载链接,也就之前那窜json数据(涂个方便,就没写正则)
                if(data.contains("{\"zt\":1,\"dom\":\"https")) {
                    JSONObject jsonObject= (JSONObject) JSON.parse(data);
                    System.out.println("下载地址");
                    //解析得到下载链接
                    String url = "https://vip.d0.baidupan.com/file/" + jsonObject.get("url");
                    System.out.println(url);
                }
                return response;
            }
        });
        //
        webClient.getPage(path);
    }
}

最后,来一个测试类

public class Test {
    public static void main(String[] args) throws IOException {
        Resolve resolve = new Resolve("https://wwe.lanzous.com/iSb3Deaa3bi");
        resolve.init();
    }
}

嗯,运行得到了一个连接,复制到浏览器会发现会创建一个下载任务。
输出结果
测试
等等--------------
拿到的这个地址你会发现,,有个问题,打开浏览器输入地址,会创建个下载任务,其实这个不是真正的文件地址,打开下载工具下载下来是个html页面,在这里着实被坑了一把,真正的文件地址是302重定向后;

获取真正的文件地址

使用json获取重定向后的连接
添加一个方法

/**
     * 
     * @param url 重定向之前的url
     * @throws IOException
     */
    private void redirect(String url) throws IOException {
        Connection connect = Jsoup.connect(url);
        //这里必须要加请求头,不然无法跳转,着实被坑了一把,找了好久才知道原因
        connect.header("Accept-Language","zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");
        Connection.Response response = connect.followRedirects(false).execute();

        System.out.println("Is URL going to redirect : " + response.hasHeader("Location"));
        System.out.println("Target : " + response.header("Location"));
    }

最后response.header("Location")拿到的就是重定向后的地址,也就是真正的文件地址,复制到下载工具就可以下载啦。

github地址: https://github.com/zjf-wyjs/parse_lanzou.git

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java解析蓝奏云直连(解析真正文件地址) 的相关文章

随机推荐

  • 电子邮件链接mailto_“ 3个链接”电子邮件的历史记录以及曾经发送的每个链接的存档...

    电子邮件链接mailto by Quincy Larson 昆西 拉尔森 Quincy Larson 3个链接 电子邮件的历史记录以及曾经发送的每个链接的存档 The history of the 3 links email and an
  • 深入理解overlayfs(一):初识

    版权声明 本文为CSDN博主 luckyapple1028 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net luckyapple1028 article d
  • Python-爬虫初体验

    在网易云课堂上看的教学视频 现在来巩固一下知识 先确定自己要爬的网站 以新浪新闻网站为例确 import requests 跟java的导包差不多 python叫导入库 res requests get http news sina com
  • Android 集成 Flutter

    前言 使用 Flutter 已经有一段时间了 开发体验还是非常好的 但是一般我们在正式使用 Flutter 的时候很少会去创建一个纯 Flutter 项目 而是需要在之前的项目中已集成的方式来编写 Flutter 这篇文章将以如何在 And
  • MySQL基础篇-第00章_写在前面

    第00章 写在前面 讲师 尚硅谷 宋红康 江湖人称 康师傅 官网 http www atguigu com 一 MySQL数据库基础篇大纲 MySQL数据库基础篇分为5个篇章 1 数据库概述与MySQL安装篇 第01章 数据库概述 第02章
  • AC-Campus准入控制--Mac

    MAC认证 简介 MAC地址认证是一种基于端口和MAC地址对用户的网络访问权限进行控制的认证方法 它不需要用户安装任何客户端软件 用户名和密码都是用户设备的MAC地址 网络接入设备在首次检测到用户的MAC地址以后 即启动对该用户的认证 用户
  • 图像分类比赛

    cp data wanghd s4 data car data data wanghd whd 使用该命令报错 添加 r 可以实现正常复制 速度非常快 参考博客得到解决 Linux常见错误 cp omitting directory 解决办
  • 输出一个单链表&&反向输出一个单链表(最后有原链接)

    输出一个单链表 假设我们有一个单链表 let list value 1 next value 2 next value 3 next value 4 next null 编写一个可以逐个输出链表元素的函数 printList list 使用
  • arcgis for landsat 8处理

    landsat8的详细数据处理http vdisk weibo com s zrSeGYf9hMRAH http blog sina com cn s blog 764b1e9d01018z6j html http blog sina co
  • osgEarth的Rex引擎原理分析(五十五)Rex引擎如何给shader文件中的uniform变量赋值

    目标 五十四 中的问题128 有几个地方 RexEngine SDK vert glsl中的 uniform sampler2D oe tile elevationTex osgEarthDrivers engine rex RexTerr
  • 全桥逆变电路部分分析

    首先来看单相逆变不间断电源设计电路中的全桥逆变电路部分 它是由两个IR2101驱动和4个MOS管构成的全桥逆变电路 有人会说了 IR2101不是半桥驱动芯片吗 没错 的确是半桥驱动芯片 和IR2104一样的 常被用在三相逆变电路中做三个半桥
  • RCE漏洞详解及绕过总结(全面)

    作者 永不落的梦想 作者主页 传送 座右铭 过去属于死神 未来属于自己 本文专栏 Web漏洞篇 今日鸡汤 只有承担起旅途风雨 最终才能守得住彩虹满天 目录 一 rce漏洞概述 二 常见RCE漏洞函数 1 系统命令执行函数 2 代码执行函数
  • 华为OD机试真题-工作安排【2023Q1】【JAVA、Python、C++】

    题目描述 小明每周上班都会拿到自己的工作清单 工作清单内包含n项工作 每项工作都有对应的耗时时长 单位h 和报酬 工作的总报酬为所有已完成工作的报酬之和 那么请你帮小明安排一下工作 保证小明在指定的工作时间内工作收入最大化 输入描述 输入的
  • 手动安装xapk

    xpak文件实际是一个压缩包 用解压软件可查看其内容 情况1 obb 多见于游戏 apk主包文件很小 用户能安装并启动 要解锁游戏全部内容 则需要下载obb文件 obb文件一般位于 sd卡的根目录下 路径大概是 sdcard Android
  • vue admin-template 添加动态路由

    store getters js const getters sidebar state gt state app sidebar device state gt state app device token state gt state
  • MATLAB实现最大类间方差算法

    Otsu算法 大律法或最大类间方差法 最大类间方差法是由日本学者大津 Nobuyuki Otsu 于1979年提出的 是一种自适应的阈值确定的方法 又叫大津法 简称OTSU 它是按图像的灰度特性 将图像分成背景和目标2部分 背景和目标之间的
  • Pycharm破解方法

    3 破解补丁激活 优点 到期时间为2099年 基本为永久啦 缺点 相对服务器激活麻烦些 但是一共只需要3个步骤 其实并不麻烦 下载 https pan baidu com s 1mcQM8CLUnweY02ahKEr4PQ 并将 Jetbr
  • win7设置右键+T 快捷键 快速新建文本文档

    1 win r 组合键呼出 运行 win就是键盘上和桌面 开始 有相同图标的按键 田 字 2 输入regedit 回车 出现 注册表编辑器 窗口 3 窗口下寻找这个位置 HKEY CLASSES ROOT Local Settings Mu
  • 【pygame学习_5】窗口设计

    1 引言 窗体是游戏的交互界面 一般我们会遇到窗口大小可调 窗口无边框 全屏显示 最小化设计 改名字 换图标等设计需求 屏幕绘制有如下重要函数 2 屏幕模式函数 pygame display set mode print pygame di
  • java解析蓝奏云直连(解析真正文件地址)

    使用htmlunit解析蓝奏云直连 前言 最近有个需求 客户端需要更新软件版本 我一直在用蓝奏云 觉得是个非常不错的网盘 可是如果用户自己打开连接选择下载方式很麻烦 用过蓝奏的朋友都知道 打开外链还要选择普通下载 电信下载 联通下载 很麻烦