Java破解图片防盗链
- 前言
今天想下载几张好看的壁纸,然后发现了一张是自己比较喜欢的额。然后点进去看看,WOW!好多好看的壁纸呀,于是我就起了贪念。哈哈!想把他们这一组图片打包下载,小白的方法就是一张一张下载,那样对于我们程序员来说是很low的办法。于是我考虑使用万能的java来下载他们的组图,花2小时鼓捣一下,但是觉得网上的文章大多是于抄袭,有些又不是很全。于是就了这篇文章,希望对各位有帮助。但不建议将此方法用作商业,因为盗用别人的图片属于违法行为!!! - 图片防盗链
很多网站为了防止别的网站盗用自己网站的图片,就是用了图片防盗链技术。也就是说,当我获取图片的url之后,直接在浏览器或者代码里访问。举个栗子:比如我想使用url要直接在浏览器中打开一张图片,但是出现的却是另外一张警告图片,里面写着:想查看图片请访问XXX网站。这就是一个典型的图片防盗链,其原理就是会在request的请求头里携带一个“referer”的变量,以此来判断该请求是从哪个链接跳转过来的。如果没有携带“referer”或者不是从本网站跳转一律返回警告或提示图片。 - 破解防盗链
知其原理,破其规律。既然咱们知道防盗链的原理,那我们可以很简单的伪装一个“referer”就可以了,也就是在请求之前先在request的header里添加一个变量为referer:http.xxx.xxxcom 也就是该网站的随意的一个url。
package com.cmc.test; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * 使用多线程下载防盗链图片 * * @author chenmc * @date 2017年8月30日 下午2:39:23 */ public class DownloadPicture { public static void main(String[] args) throws InterruptedException { for (int i = 1; i <= 10; i++) { int n = i; Thread t = new Thread(){ @Override public synchronized void run() { try { httpRequest(n); } catch (Exception e) { e.printStackTrace(); } super.run(); } }; t.start(); } } /** * 发起http请求 * * @author chenmc * @date 2017年8月30日 下午2:36:09 * @param n * @throws Exception */ public static void httpRequest(int n) throws Exception { for (int i = (n-1)*5 > 1 ? (n-1)*5 : 1; i < n*5; i++) { long startTime = System.currentTimeMillis(); String path = "C:/Users/admin/Pictures/壁纸/" + String.format("%03d", i) + ".jpg"; //这里url写你想要下载图片的url String uri = String.format("http://bizhi.xxx.com/rluo/%s.jpg", String.format("%03d", i)); System.out.println(uri); URL url = new URL(uri); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestProperty("referer", "http://bizhi.xxx.com"); //这是破解防盗链添加的参数 conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); InputStream inStream = conn.getInputStream();//通过输入流获取图片数据 readInputStream(inStream, path);//得到图片的二进制数据,并保存 long endTime = System.currentTimeMillis(); System.out.println(path + "--耗时:" + (endTime-startTime)/1000 + "s"); } } /** * 保存图片 * * @author chenmc * @date 2017年8月30日 下午2:35:54 * @param inStream * @param path * @throws Exception */ public static void readInputStream(InputStream inStream, String path) throws Exception{ FileOutputStream fos = new FileOutputStream(new File(path)); byte[] buffer = new byte[102400]; int len = 0; while( (len=inStream.read(buffer)) != -1 ){ fos.write(buffer, 0, len); } inStream.close(); fos.flush(); fos.close(); } }上述例子我使用了多线程技术,因为我想下载的壁纸有247张之多,所以我使用了50个线程,每个线程下载5张。因为是自己下载壁纸用的,所以没有考虑效率之类的,这里也希望大家可以自己去改进它。
最后给大家一波福利~~~好看的夕阳壁纸1 夕阳壁纸2 因为我上传的资源限制大小为80M,所以分开上传了~因为这是图片资源,所以csdn可能会删除哦,想要的同学们尽快下载吧! - 给大家养养眼~~~
Java破解图片防盗链的更多相关文章
- Nginx中防盗链(下载防盗链和图片防盗链)操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- ASP.NET 实现简单的图片防盗链介绍
在此,网站图片防盗链的方法是,通过获取Http请求头中的 Referer 标头与本网站域名比较,来判断用户是否来自本站跳转过来的 . 创建一个全局处理程序,用来处理images目录下的图片的直接请求: ...
- Nginx修改配置实现图片防盗链
一般情况下,防盗链是针对软件下载和图片的,由于一般的站点不提供资源下载,所以本文主要是针对图片的防盗链 1.如果对全站图片做防盗链,至少需要一个另外的域名存放指向图片.因为如果对全站图片做了防盗链,包 ...
- CSS代码实现图片防盗链
CSS代码实现图片防盗链的方法其实很简单.在CSS文件中添加以下代码: img { filter:exPRession( this.不能去掉 ? "" : ( (!this.com ...
- asp.net MVC 网站图片防盗链的几种方法
目录 1. 通过 URL Rewrite Module 组件 2. 通过 nginx 图片防盗链 3.自定义 HttpHandler 处理 4. 通过 MVC 自定义路由规则防盗链 5. 通过 MVC ...
- php解决微信文章图片防盗链
解决微信文章图片防盗链 function actionWechatImg() { header('Content-type: image/jpg'); $url = $_GET['url']; $re ...
- 第十三节:HttpHander扩展及应用(自定义扩展名、图片防盗链)
一. 自定义扩展名 1. 前言 凡是实现了IHttpHandler接口的类均为Handler类,HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- Referer图片防盗链
前几天讲了<nginx下载防盗链>,今天继续说下图片防盗链. 他们两个使用的指令不同,前者使用secure link,并且需要程序配合,但是效果非常好;后者不需要程序配合,根据图片来源来实 ...
- Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
随机推荐
- 【ES6】Generator+Promise异步编程
一.概念 首先我们要理解Generator和Promise的概念. Generator:意思是生成器,可以在函数内部通过yeild来控制语句的执行或暂停状态. *Foo(){ yeild consol ...
- 本地电脑通过Navicat连接阿里云的Mysql数据库
第一步:需要设置mysql的监听地址 查看mysql的监听地址: netstat -nao 如果3306(mysql默认端口)前面是0.0.0.0,则表示端口监听没有问题,如果是127.0.0.1,则 ...
- c/c++再学习:常用字符串转数字操作
c/c++再学习:常用字符串转数字操作 能实现字符串转数字有三种方法,atof函数,sscanf函数和stringstream类. 具体demo代码和运行结果 #include "stdio ...
- django-celery配置
1.项目启动顺序: 启动项目: python manage.py runserver 启动celery beat python manage.py celery beat 启动celery worke ...
- 027 storm面试小题
1.大纲 Storm工作原理是什么? 流的模式是什么?默认是什么? 对于mapreduce如何理解? Storm的特点和特性是什么? Storm组件有哪些? 2.Storm工作原理是什么? 相对于ha ...
- 数组实现int随机数的阶乘(避免大数问题)
面试的一道题目,实现int随机数的阶乘.这道题就是考察你考没考虑大数问题,如何避免它. 我能想到的就是用数组去实现,然后写了一下代码.但是当i的值很大,接近Max_value时的情况还没有考虑到. 直 ...
- Windows 运行命令大全,装逼必备哦!
以下已整理,以字母先后排序: appwiz.cpl:程序和功能 cliconfg:SQL SERVER 客户端网络实用工具 cmd:CMD命令提示符 comexp.msc或者dcomcnfg:组件服务 ...
- vue解决加载闪烁问题
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- USACO 邮票 Stamps
f[x]表示组成 x 最少需要的邮票数量 一一举例 最多贴5张邮票,有三种邮票可用,分别是1分,3分,8分 组成0分需要0张邮票 ——f[0]=0 组成1分需要在0分的基础上加上一张1分邮票 ——f[ ...
- Xmanager6 下载地址
Xmanager-6标准版下载地址 http://xiazai.xshellcn.com/trial/Xmanager-6.0.0080_yy.exe Xmanager-6企业版下载地址 http:/ ...