public static void main(String[] args) throws Exception{
// 我要模拟的URL
//http://domain.oray.com/domain/check.php?domain=ixr.name&free=0
String host = "domain.oray.com";
// 解析域名IP
String ip = InetAddress.getByName(host).getHostAddress();
// 建立socket连接
Socket socket = new Socket(ip,80);
PrintWriter print = new PrintWriter(socket.getOutputStream());
// 根据 HTTP协议输入请求协议
print.println(String.format("GET /domain/check.php?domain=%s&free=0 HTTP/1.1", "ixr.name"));
// 告诉服务器我们请求的 HOST
print.println(String.format("Host: %s",host));
// 嘻嘻,挑战下GIZP的HTML解析,告诉服务器我是支持GZIP的
print.println("Accept-Encoding: gzip, deflate");
// 我们骗下我们是火星浏览器,没错我们是火星浏览器1.擦 版本 系统是 火星 操作系统 1.擦 版本。
print.println("User-Agent Mars/1.x (Mars OS 1.x)");
// HTTP 是说 一个空行结束头信息
print.println();
// 提交下才有用哟!~
print.flush();
// 接下来我们获取服务器的返回流
InputStream inputStream = socket.getInputStream();
// 把流读取到一个字节流里 方便循环操作吧!~
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
// 这里就读了
for(int idx = inputStream.read(bytes);;idx = inputStream.read(bytes)){
byteArrayOutputStream.write(bytes,0,idx);
if(idx < 1024){
break;
}
}
// 既然保存过就把SOCKET关闭吧!~
// 不然服务器要哭泣的,别人的服务器我们伤不起!~
socket.close();
// 放在一个字节数组里,更加的方便操作!~
bytes = byteArrayOutputStream.toByteArray();
// 关闭这个流,因为字节读取出来了!~
byteArrayOutputStream.close();
// 这个记录head的结束位置,后边的记录上一行的结束位置。
int head_end = -1,index = 0;
for (int idx = 0; idx < bytes.length - 4; idx++) {
byte ln11 = bytes[idx + 0];
byte ln12 = bytes[idx + 1];
byte ln21 = bytes[idx + 2];
byte ln22 = bytes[idx + 3];
// 这里如果 说明下 字节 13 12 代表 \r\n 如果遇到 这个 就说明一个问题,一行信息结束(嘻嘻)!~
if(ln11 == 13 && ln12 == 10){
// 我们打印头信息看看
System.out.println(new String(bytes,index,idx - index));
// + 2 是把上一行的 \r\n符跳过!~
index = idx + 2;
}
// 如果遇到 \r\n\r\n 那么头就结束了。
if(ln11 == 13 && ln12 == 10 && ln21 == 13 && ln22 == 10){
// 这个8很有意义的,4代表的是 \r\n\r\n
// 后边4个代表的是 2个数字(这个数字我也不知道什么意思,有的网页是3个有的木有),在加上这一行的 \r\n
head_end = idx + 8;
// 头信息完了,后边的内容是GZIP压缩的流了 在读取小心爆菊花!~
break;
}
}
// 算出位置把字节转换成一个InputStream
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes, head_end, bytes.length - head_end);
// 使用GZIP流包装下,这样就可以解压了
GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream);
// 在使用Reader包装下方便我们读
BufferedReader reader = new BufferedReader(new InputStreamReader(gzipInputStream));
// 因为内容就一行直接 readLine 把!~ 嘻嘻,如果很多行你就 使用 for 读到结尾好了!~
String resultJson = reader.readLine();
// 打印下
System.out.println(resultJson);
// 这个可以关闭了
reader.close();
}
打印信息贴上
HTTP/1.1 200 OK
Server: nginx/0.8.15
Date: Thu, 26 May 2011 04:08:19 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: _s_id_=i62268mltg0iu5g65s64bdeps6; path=/; domain=oray.com
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip
[{"domain":"ixr.name","ret":0}]
分享到:
相关推荐
PS手工打造机械眼纯手工打造PS机械眼纯手工打造PS机械眼
### MyBatis源码解析——由阿里巴巴P7架构师纯手工打造 #### 一、前言 在现代软件开发过程中,持久层框架如MyBatis因其简单易用、灵活高效的特点而受到广泛欢迎。作为一款优秀的Java持久层框架,MyBatis通过SQL...
我要质疑我,你只要安心下载就好
在电子商务领域,构建一个电子商城是一项复杂而细致的工作,尤其当这个商城是“纯手工打造”的,这意味着每一个功能、每一个细节都是通过编程和设计人员的精心制作实现的,而非依赖于现成的模板或框架。这样的商城...
"纯手工打造黑色经典菜单"项目就展示了如何利用jQuery库和CSS技术来创建一个动态且具有黑色经典风格的菜单。下面我们将深入探讨这个项目中的关键知识点。 首先,jQuery是一个广泛使用的JavaScript库,它简化了DOM...
本文将深入探讨“广东地图 fusionMap纯手工打造”这一主题,结合提供的描述和标签,我们将重点关注如何使用FusionMap创建自定义的广东地图以及相关配置。 首先,FusionMap是一款基于JavaScript的地图组件,它可以...
DataForward,纯手工打造MODBUS TCP slave的服务端 纯手工打造MODBUS TCP slave的服务端,供大家参考学习,也希望大佬提出建议,指出不足之处,目前只支持03功能。新版,之前的BUG修复,有不足之处还请多多指教
语法分析(一):纯手工打造公式计算器
DHCP(动态主机配置协议)是网络管理中的关键组件,主要负责自动分配、管理和回收IP地址,以及其他网络配置参数,如子网掩码、默认网关、DNS服务器地址等。DHCP基于Client/Server架构,简化了网络环境中的IP配置工作...
正则文法和有限自动机:纯手工打造词法分析器
js纯手工打造的一个树状展开和关闭的菜单; myList.style.display
纯手工打造C#窗体程序,CSC编译后只有6KB ,参透C#的运行机制。使用CSC program.cs编程,生成的程序只有6KB。
《纯手工打造SDK编写的五子棋游戏代码》是一个针对Windows平台,采用SDK(Software Development Kit)和VC++(Visual C++)进行开发的项目,旨在帮助开发者学习和理解Windows程序设计。SDK编程通常指的是不依赖任何...
"纯手工打造类似Ext的验证效果"这个主题聚焦于使用JavaScript进行表单验证,模仿流行的ExtJS库提供的验证功能。ExtJS是一款功能强大的JavaScript框架,它提供了丰富的组件和强大的数据绑定机制,包括复杂的表单验证...
在介绍中提到的“纯手工打造电力线通信调制解调器”意味着通过手工组装和调试,可以更加深入地了解PLC的工作原理,以及调制解调器的运作机制。 在电力线通信调制解调器的构建中,通常会用到一些核心器件,如通用微...
以下是一份详细的纯手工打造高颜值简历的操作指南: 1. **设置页边距**:首先,打开Word文档,点击【页面布局】选项卡,选择【页边距】的【自定义页边距】,将上下左右页边距均设置为2厘米,以保持简历的整洁和专业...
很好的linux入门进阶 构建LFS系统 构建临时编译环境 安装gtk+及环境搭建 等等
Wrox Expert One-on-One J2EE Design and Development 含详细目录书签(纯手工打造,一个弄错,全部重来)