不多哔哔 直接上图
演示链接: https://biaomian.lanzoum.com/iW9UAr43hij
1.打开网站
2.在下载按钮点击右键 选择 [检查] 选项
在控制台可以看到,下载按钮其实是来自于iframe (不懂自己百度,还不行就google)
也就是说获取到iframe中的src,就可以根据拼凑出一个新的url(图示标记2)
打开新的url就可以获取到下载按钮对应的文件下载链接(图示3标记)
3.接下来分析上图示2的新url页面源码
打开url 空白处点击右键 选查看源码
得到以下图示
代码分析得知,打开新的url后会向蓝奏后台异步请求获取到下载地址
4.分析异步请求
在打开新url的页面 任意位置点击右键,选中[检查]选项,会打开控制台
控制台不在下边的 可以按右边的方式调整位置 (不调也行!!!!!别纠结在哪里)
点击左边的Network 查看网络请求 (这时候是空白的......别问为什么是空白的,就是空白的) F5刷新页面
这时候 注意了 !!!!!!!
页面上显示 [地址超时,请刷新] 不要慌~~ 不要慌!!!!
从头再来吧....手脚麻利点...用处你单身二三十年的手速操作.....
5.继续哔哔 分析异步请求后台的接口
页面刷新后,可以看到异步请求了https://biaomian.lanzoum.com/ajaxm.php 接口
分析接口信息 是以POST请求发送form表单的形式进行异步请求
异步请求响应结果是Json数据
在第3步的源码分析得知 将异步请求响应结果中的dom和url拼凑起来就是一个下载地址
最后一步了 分析下载地址
>将拼凑的下载地址 丢到有控制台的页面去访问
>在控制台点击Doc过滤请求,可以找到下载地址的网络请求记录
>分析可以看到请求状态码是 302
>302代表着需要重定向
>找到下载地址响应的header信息里面的location (不要问为什么是location 自己百度去)
>location的值就是真实下载地址
>location的值就是真实下载地址
>location的值就是真实下载地址
>拿这个地址就可以用代码直接下载文件到电脑中(用途自由发挥,本人概不负责)
Java示例
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.22</version>
</dependency>
String html = HttpUtil.get("http://xxxxxxxxxxxxxxxxxxxxx");
Document doc = Jsoup.parse(html);
Elements iframe = doc.getElementsByTag("iframe");
if (iframe.size() == 0) {
Console.log("没有iframe");
return R.failed();
}
String src = iframe.get(0).attr("src");
URL url2 = URLUtil.url(url);
String url3 = url2.getProtocol() + "://" + url2.getHost() + src;
html = HttpUtil.get(url3);
doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
Element script = scripts.get(scripts.size() - 1);
String s1 = script.html().split("data :")[1];
s1 = s1.replaceAll("\n", "")
.replaceAll("\r", "")
.replaceAll("\t", "")
.replaceAll(",//", "")
.replaceAll("'signs':ajaxdata", "'signs':'?ctdf'")
.replaceAll("'websign':websign", "'websign':'websign'")
.replaceAll("'websignkey':websignkey", "'websignkey':'kHQR'")
.replaceAll("'", "\"");
JSONObject formData = JSONObject.parseObject(s1);
String body = HttpRequest.post(url2.getProtocol() + "://" + url2.getHost() + "/ajaxm.php").form(formData)
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("Accept-Encoding", "gzip, deflate, br")
.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")
.header("Upgrade-Insecure-Requests", "1")
.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36")
.header("sec-fetch-dest", "empty")
.header("sec-fetch-mode", "cors")
.header("sec-fetch-site", "same-origin")
.header("referer", url3)
.header("x-requested-with", "XMLHttpRequest")
.execute()
.body();
JSONObject jsonObject = JSONObject.parseObject(body);
String dom = jsonObject.getString("dom");
String url1 = jsonObject.getString("url");
String downloadUrl = dom + "/file/" + url1;
HttpResponse execute = HttpRequest.get(downloadUrl)
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("Accept-Encoding", "gzip, deflate, br")
.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")
.header("Host", dom.replace("https://", ""))
.header("Upgrade-Insecure-Requests", "1")
.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36")
.execute();
location = execute.header("location");