伪造referer获取网络资源

在做一个社交网站时发现,在页面html中通过<img src=""> 直接引用网络资源时,部分图片无法显示。

发现:这些无法显示的资源,是在服务器端做了referer禁用处理,这样就只能把资源下载到自己的服务器使用了。

referer禁用:客户端在向服务器请求时,会通过"referer" 属性传递发起请求的域名,要是与资源域名不能匹配就不允许访问。

为此,本虾米写了一个伪造referer的小应用,用于获取网络资源,并保存到自己的服务器。

不再赘述了,直接上代码:

/* fileUrl网络资源地址 */

public static boolean saveUrlAs(String fileUrl, String savePath){

try {

/* 将网络资源地址传给,即赋值给url */

URL url = new URL(fileUrl);

/*获取资源路径的主域名*/

String refererUrl = getRefererUrl2(fileUrl);

/* 此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流 */

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon;)");

connection.setRequestProperty("Accept-Encoding", "gzip");

/*伪造referer资源信息*/

connection.setRequestProperty("referer", refererUrl);

connection.setRequestProperty("cookie", refererUrl);

DataInputStream in = new DataInputStream(connection.getInputStream());

/* 此处也可用BufferedInputStream与BufferedOutputStream  需要保存的路径*/

DataOutputStream out = new DataOutputStream(new FileOutputStream(savePath));

/* 将参数savePath,即将截取的图片的存储在本地地址赋值给out输出流所指定的地址 */

byte[] buffer = new byte[1024];

int count = 0;

while ((count = in.read(buffer)) > 0)

{

out.write(buffer, 0, count);

}

out.close();

in.close();

connection.disconnect();

return true;

} catch (Exception e) {

System.out.println(e + fileUrl + savePath);

return false;

}

}

/**

* 根据资源路径截取资源的域名信息

* @param url

* @return

*/

public static String getRefererUrl2(String url){

String result = "";

Pattern p = Pattern.compile("http://((\\w)+\\.)+\\w+");

Matcher m = p.matcher(url);

if(m.find()){

result = m.group();

}

return result;

}

public static void main(String[] args) {

String photoUrl = "http://pic2.zhimg.com/1e9e403b7b871ecc5a9f783df550f5da_b.jpg";

String fileName = photoUrl.substring(photoUrl.lastIndexOf("/"));

String filePath = "d:/photosFile";

saveUrlAs(photoUrl, filePath+fileName);

}

时间: 2024-10-15 11:03:32

伪造referer获取网络资源的相关文章

JavaScript 伪造 Referer 来路方法

Javascript 是一种由Netscape的LiveScript发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果. 因为服务器端脚本可以轻易伪造referer,所以各大统计站点cnzz,百度统计,ga,51la等都是通过js来判断来路,不过现在有个方法js的referer也可以伪造了. WinHttp.WinHttpRequest.5.1 是 msxml 4.0 的底层对象,也就是说

如何获取网络资源?

# encoding=utf-8 #python 2.7.10 #xiaodeng #如何获取网络资源? #HTTP权威指南 26页 #url就是因特网资源的标准化名称,他指向每一条电子信息,告诉你他们位于何处,以及如何与之交互. #URL是浏览器寻找信息时所需的资源位置. #一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报文来获取他所期望的资源. #URL分为三部分: #1.url方案,告知web客户端怎么访问资源,如:http协议 #2.服务器的位置,告知web客户端资源位于何

OC利用正则表达式获取网络资源(网络爬虫)

在开发项目的过程,很多情况下我们需要利用互联网上的一些数据,在这种情况下,我们可能要写一个爬虫来爬我们所需要的数据.一般情况下都是利用正则表达式来匹配Html,获取我们所需要的数据.一般情况下分以下三步:1.获取网页的html2.利用正则表达式,获取我们所需要的数据3.分析,使用获取到的数据,(例如,保存到数据库) 接下来我们分析代码:1.获取网页的html 对于一些网页,不需要提交Post提交数据时,我们可以简单的利用NSURL类来获取我们所需要的html,交将其转换中kCFStringEnc

C#:webbrowser中伪造referer,为何对流量统计器无效?

使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null, "Referer:http://www.xxx.com") 这段时间一直研究怎么才能在 webbrowser中设置referer来路来伪造来路进行刷流量,可是最后研究了半个月最终以失败告终,因为现在的统计代码,比较实际的就是cnzz.com和google adsense自带的统计,他们的统计都是通过js文件进行统计的,这样就形成了伪造来

android-使用URL获取网络资源

今日使用URL获取网络资源时遇到问题记录一下: 1. android4.0 以后,不可以在主线程中请求网络资源 访问网络资源,必须新起一个线程. 2.哪个线程创建的view,哪个线程才有权限操作它 Only the original thread that created a view hiberarchy can touch tis views 获取到网络资源之后,只可以回到原来的线程中将资源放入android的view中. android-使用URL获取网络资源

PHP伪造referer突破网盘禁止外链(附115源码)

新建一个文件file.php.后面的参数就是需要伪造referfer的目标地址吧.如:file.php/http://www.xxx.xxx/xxx.mp3 复制内容到剪贴板 代码: <?$url=str_replace('/file.php/','',$_SERVER["REQUEST_URI"]);//得出需要转换的网址.这里我就偷懒,不做安全检测了,需要的自己加上去$downfile=str_replace(" ","%20",$ur

安卓四大组件之activity和获取网络资源之断点续传

Day05 数据存储及多线程断点续传1.数据提交到服务器两种方式的优缺点* GET请求优点:使用非常方便,只需要在url后面组拼数据.缺点:数据在url的后面组拼,不安全.有数据长度限制.* POST请求优点:安全,数据不是在url后面组拼而是通过流的方式写给服务器.数据长度不受限制缺点:编写麻烦. 2.数据提交* GET请求1. 需要在url后面组拼提交的数据* POST请求1. 不需要组拼任何的数据2. 必须指定请求的数据类型,是一个经过url编码的表单数据.Content-Type3. 以

Android 通过URL获取网络资源

1.先在AndroidManifest.xml中注册加入访问因特网服务的权限: <uses-permission android:name="android.permission.INTERNET" /> (若不加入,则会出现permission denied异常) 2.代码如下: package vip.test.HttpGet; import java.io.BufferedInputStream; import java.io.InputStream; import

url 获取网络资源

public class Url { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { try { URL url= new URL("http://img2.haoju.cn/upfiles/201212/1355452132.jpg!mid"); getInfo(url); } catch (MalformedURLExcept