Httpclent 请求限制,判断返回类型和返回数据大小

JSON 2017-03-23 11:18:30 36764

本站前一段时间遭受出网带宽跑满攻击,蓝瘦香菇中。攻击陆陆续续持续了2个星期,后来改成了动态链接好一点。

目前 在线HTTP POST/GET ... 接口测试工具 工具已经解决了一系列问题,但是发现还是有人恶意请求,比如请求一个视频文件,或者请求大图片,导致服务器卡死,内存溢出,查看了日志,2种内存溢出。

1.OutOfMemoryError: PermGen space

2.OutOfMemoryError:  Java heap space

解决方案:

http请求代码:

URL realUrl = new URL(url);
// 打开和URL之间的连接  
conn = (HttpURLConnection) realUrl.openConnection(); 
// 发送POST请求必须设置如下两行  
conn.setRequestMethod(StringUtils.upperCase(type));// 提交模式
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Connection", "close"); 
conn.setConnectTimeout(3000);  //设置连接主机超时(单位:毫秒)  
conn.setReadTimeout(2000);     //设置从主机读取数据超时(单位:毫秒)  

//省略一些内容 ... ... 

一、请求返回值大小判断。

//获取返回值长度
int contentInt = conn.getContentLength();
//判断大于100KB
if(contentInt > 102400){
	map.put("result", "您的返回值为:"+ getPrintSize(contentInt) +"。\r\n我们防止恶意攻击只支持:返回值支持小于100KB;\r\n给你带来的不便敬请谅解;\r\n对此功能有更好的意见请加QQ群:259217951,尽量满足你的任何需求。");
	return map;
}

二、请求类型判断。

//获取返回值类型
String contentType = conn.getContentType();  
//只允许text/html  application/json
if(contentType == null || ( !contentType.equals("text/html") &&! contentType.startsWith("application/json") )){
	map.put("result", "您的返回类型是:" + contentType +";\r\n我们为了防止恶意攻击只支持:text/html 或者 application/json;\r\n给你带来的不便敬请谅解;\r\n对此功能有更好的意见请加QQ群:259217951 ,尽量满足你的任何需求。");
	return map;
}

三、KB、MB大小转换代码

public static String getPrintSize(long size) {
	// 如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义
	if (size < 1024) {
		return String.valueOf(size) + "B";
	} else {
		size = size / 1024;
	}
	// 如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位
	// 因为还没有到达要使用另一个单位的时候
	// 接下去以此类推
	if (size < 1024) {
		return String.valueOf(size) + "KB";
	} else {
		size = size / 1024;
	}
	if (size < 1024) {
		// 因为如果以MB为单位的话,要保留最后1位小数,
		// 因此,把此数乘以100之后再取余
		size = size * 100;
		return String.valueOf((size / 100)) + "."
				+ String.valueOf((size % 100)) + "MB";
	} else {
		// 否则如果要以GB为单位的,先除于1024再作同样的处理
		size = size * 100 / 1024;
		return String.valueOf((size / 100)) + "."
				+ String.valueOf((size % 100)) + "GB";
	}
}

效果如下。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/188.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Httpclent 请求限制判断返回类型返回数据大小
JSOUP 教程,JSOUP请求JSON ,JSOUP返回JSON 数据
Elasticsearch 随机返回数据 API
CDN 请求返回 connection reset by peer,被拦截请求解决方案
JQuery Ajax四种写法,Ajax请求返回JSON 操作Demo
Java 之 HTTP请求乱码解决,GZIP 返回值乱码解决
Java API接口返回不是JSON的解决方案,SpringMVC返回JSON配置。
Elasticsearch 聚合(aggregation)查询返回所有
JS中 “is not defined” 如何判断defined,definedundefined 的区别
JS判断网页广告被屏蔽解,广告终结者、AdGuard插件判断并提示
最新文章
dns污染怎么解决?为什么会出现这种情况? 26
怎么加密html网页代码 74
老黄历有红色和绿色是什么意思?它们有的寓意? 120
揭秘手机号码的神秘吉凶之谜 218
qq号吉凶号码查询-qq号吉凶真的有影响吗? 276
java json字符串转json对象 2964
JSON文件如何转换为txt文件 2120
如何判断字符串是JSON数组还是JSON对象 493
json对象与json字符串的转换方法 2119
如何解析JSON数据(详细解答) 1502
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 673184
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 666920
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 588836
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 546339
免费天气API,天气JSON API,不限次数获取十五天的天气预报 520117
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 508180
Elasticsearch教程(四) elasticsearch head 插件安装和使用 477731
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 253374
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 243109
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 223151
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...