hacker85 写了:
1、是否可以讲述一下技术原理
2、是否可以将源码的相关内容注释
3、是否可以将软件运行的环境及相关的依赖等条件说明。
1、是否可以讲述一下技术原理
技术原理很简单的 就是在一位友人 (其实我也不认识他) 他的博客上 有个功能 点击一个按钮 就能生成最新的hosts
我之前就是每次去点 之后把生成的hosts粘贴到我机器上,但是hosts现在更新太快了 每次都粘 太麻烦,于是我就去他那抓了。
就是用HttpURLConnection去模拟一个请求 之后抓取返回结果 在写入本地文件了。
代码: 全选
URL url = new URL(createUrl(hostspasscode, gs, wk, twttr, fb, flkr, dpbx, odrv, yt, nohl));
//System.out.println(cookie);
// System.out.println(url.toString());
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5 * 1000);
conn.setDoOutput(true);
//get方式提交
conn.setRequestMethod("GET");
//凭借请求头文件
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
conn.setRequestProperty("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Cookie", cookie);
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0");
另外 这个网址返回的输入流 是gzip格式,所以解析的时候先包装一下,就ok了
代码: 全选
**
* 读取将InputStream中的字节读以字符的形式取到字符串中,如果encoding是gzip,那么需要先有GZIPInputStream进行封装
*
* @param inputStream InputStream字节流
* @param encoding 编码格式
* @return String类型的形式
* @throws IOException IO异常
*/
private String readStream(InputStream inputStream, String encoding) throws Exception {
StringBuffer buffer = new StringBuffer();
ProgressMonitorInputStream pmis = null;
InputStreamReader inputStreamReader = null;
GZIPInputStream gZIPInputStream = null;
if (GZIPCODING.equals(encoding)) {
gZIPInputStream = new GZIPInputStream(inputStream);
inputStreamReader = new InputStreamReader(ProgressUtil.getMonitorInputStream(gZIPInputStream, "获取网络数据"), ENCODING);
} else {
inputStreamReader = new InputStreamReader(ProgressUtil.getMonitorInputStream(inputStream, "获取网络数据"), ENCODING);
}
char[] c = new char[1024];
int lenI;
while ((lenI = inputStreamReader.read(c)) != -1) {
buffer.append(new String(c, 0, lenI));
}
if (inputStream != null) {
inputStream.close();
}
if (gZIPInputStream != null) {
gZIPInputStream.close();
}
if (pmis!=null) {
gZIPInputStream.close();
}
return buffer.toString();
}
其实我都不知道mac的hosts文件在哪里 所以我没做处理,算作不支持的系统。
另外重启网络的命令 我也不晓得 所以放弃了
但windows 和ubuntu 一定没问题。
需要JDK1。6 版本。要有sudo 运行。否则没有权限修改文件。