- 浏览: 304548 次
- 性别:
- 来自: 南京
最新评论
-
memorymyann:
不好意思我看错了
Java计算时间差 -
memorymyann:
好吧,网上很多方法一的,我不知道大家有验证过没有。我测试了下。 ...
Java计算时间差 -
ndzj981479673:
TonyLian 写道下这个包到WEB-INF/libs sp ...
org.springframework.web.servlet.DispatcherServlet -
Heart-wu:
com.jacob.com.ComFailException: ...
Jacob使用小结 -
wo4562658:
没有附件?getAnyCellStyle 这个方法,getHd ...
POI使用小结
背景:因为想写一个测试tomcat连接的程序,就试试自已去构造Http请求。找了一下发现Apache下有一个比较成熟的轮子HttpComponets.
使用库:Apache Http Client
HttpClient是一个代码级的Http客户端工具,可以使用它模拟浏览器向Http服务器发送请求。
其中HttpClient是HttpComponents项目其中的一部份,HttpComponents简称为hc.
见http://hc.apache.org/
使用HttpClient还需要HttpCore.这里其中包括Http请求与Http响应的代码封装。
现在导入两个jar包:
httpclient-4.0.jar
httpcore-4.0.jar
httpmime-4.0.jar
开始一个请求代码如下:
Java代码
HttpClient httpClient = new DefaultHttpClient();
//构造请求,如果想使用POST则new一个HttpPost
HttpGet get = new HttpGet("http://www.iteye.com");
HttpResponse response = httpClient.execute(get);
//先从响应头得到实体
HttpEntity entity = response.getEntity();
//得到实体输入流
InputStream inSm = entity.getContent();
Scanner inScn = new Scanner(inSm);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
entity.consumeContent();
HttpClient httpClient = new DefaultHttpClient();
//构造请求,如果想使用POST则new一个HttpPost
HttpGet get = new HttpGet("http://www.iteye.com");
HttpResponse response = httpClient.execute(get);
//先从响应头得到实体
HttpEntity entity = response.getEntity();
//得到实体输入流
InputStream inSm = entity.getContent();
Scanner inScn = new Scanner(inSm);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
entity.consumeContent();
这个是在HC例子中有代码作了少量的修改。
输出:
Java代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区</title>
<meta name="description" content="Java编程,Spring Struts Webwork框架深入,XMLHTTP AJAX开发,Java Web开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,Rich Client讨论,Ruby编程,Ruby DSL开发,Ruby on rails实践,JavaScript编程,敏捷软件开发XP TDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.net C/C++ Erlang/FP PHP/Linux平台,精通Hibernate" />
<meta name="keywords" content="Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 JavaEye深度技术社区" />
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
<link href="/rss" rel="alternate" title="JavaEye技术网站RSS频道订阅" type="application/rss+xml" />
<link href="http://www.iteye.com/stylesheets/homepage.css?1263389049" media="screen" rel="stylesheet" type="text/css" />
</head>
...省略,证明以上代码已经成功
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区</title>
<meta name="description" content="Java编程,Spring Struts Webwork框架深入,XMLHTTP AJAX开发,Java Web开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,Rich Client讨论,Ruby编程,Ruby DSL开发,Ruby on rails实践,JavaScript编程,敏捷软件开发XP TDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.net C/C++ Erlang/FP PHP/Linux平台,精通Hibernate" />
<meta name="keywords" content="Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 JavaEye深度技术社区" />
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
<link href="/rss" rel="alternate" title="JavaEye技术网站RSS频道订阅" type="application/rss+xml" />
<link href="http://www.iteye.com/stylesheets/homepage.css?1263389049" media="screen" rel="stylesheet" type="text/css" />
</head>
...省略,证明以上代码已经成功
当然这个只是大刀一小试。现在还离我的目标差一点点:
需要做个头,我还不太清楚有什么头可以使用,那样我又写了个程序看看IE的头到底是怎样子的,
没有抓包程序,只好自已写个程序:
Java代码
ServerSocket socketServer = new ServerSocket(10086);
Socket client = socketServer.accept();
InputStream inClient = client.getInputStream();
Scanner inScn = new Scanner(inClient);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
inScn.close();
client.close();
socketServer.close();
ServerSocket socketServer = new ServerSocket(10086);
Socket client = socketServer.accept();
InputStream inClient = client.getInputStream();
Scanner inScn = new Scanner(inClient);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
inScn.close();
client.close();
socketServer.close();
在IE地址栏上输入:
http://locahost:10086/
点确定后可以得到程序输出:
Java代码
GET / HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Accept-Encoding: gzip, deflate
Host: localhost:10086
Connection: Keep-Alive
GET / HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Accept-Encoding: gzip, deflate
Host: localhost:10086
Connection: Keep-Alive
分析请求包中这六个头信息。可以参考以下文章:
http://zsxxsz.iteye.com/blog/568250
现在我使用HC模拟IE的请求,修改后代码如下:
Java代码
HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet("http://www.iteye.com");
get.setHeader("Accept", "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");
get.setHeader("Accept-Language","zh-CN");
get.setHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)");
get.setHeader("Accept-Encoding","gzip, deflate");
get.setHeader("Host","you never be know");
get.setHeader("Connection","Keep-Alive");
HttpResponse response = httpClient.execute(get);
使用库:Apache Http Client
HttpClient是一个代码级的Http客户端工具,可以使用它模拟浏览器向Http服务器发送请求。
其中HttpClient是HttpComponents项目其中的一部份,HttpComponents简称为hc.
见http://hc.apache.org/
使用HttpClient还需要HttpCore.这里其中包括Http请求与Http响应的代码封装。
现在导入两个jar包:
httpclient-4.0.jar
httpcore-4.0.jar
httpmime-4.0.jar
开始一个请求代码如下:
Java代码
HttpClient httpClient = new DefaultHttpClient();
//构造请求,如果想使用POST则new一个HttpPost
HttpGet get = new HttpGet("http://www.iteye.com");
HttpResponse response = httpClient.execute(get);
//先从响应头得到实体
HttpEntity entity = response.getEntity();
//得到实体输入流
InputStream inSm = entity.getContent();
Scanner inScn = new Scanner(inSm);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
entity.consumeContent();
HttpClient httpClient = new DefaultHttpClient();
//构造请求,如果想使用POST则new一个HttpPost
HttpGet get = new HttpGet("http://www.iteye.com");
HttpResponse response = httpClient.execute(get);
//先从响应头得到实体
HttpEntity entity = response.getEntity();
//得到实体输入流
InputStream inSm = entity.getContent();
Scanner inScn = new Scanner(inSm);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
entity.consumeContent();
这个是在HC例子中有代码作了少量的修改。
输出:
Java代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区</title>
<meta name="description" content="Java编程,Spring Struts Webwork框架深入,XMLHTTP AJAX开发,Java Web开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,Rich Client讨论,Ruby编程,Ruby DSL开发,Ruby on rails实践,JavaScript编程,敏捷软件开发XP TDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.net C/C++ Erlang/FP PHP/Linux平台,精通Hibernate" />
<meta name="keywords" content="Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 JavaEye深度技术社区" />
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
<link href="/rss" rel="alternate" title="JavaEye技术网站RSS频道订阅" type="application/rss+xml" />
<link href="http://www.iteye.com/stylesheets/homepage.css?1263389049" media="screen" rel="stylesheet" type="text/css" />
</head>
...省略,证明以上代码已经成功
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区</title>
<meta name="description" content="Java编程,Spring Struts Webwork框架深入,XMLHTTP AJAX开发,Java Web开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,Rich Client讨论,Ruby编程,Ruby DSL开发,Ruby on rails实践,JavaScript编程,敏捷软件开发XP TDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.net C/C++ Erlang/FP PHP/Linux平台,精通Hibernate" />
<meta name="keywords" content="Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 JavaEye深度技术社区" />
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
<link href="/rss" rel="alternate" title="JavaEye技术网站RSS频道订阅" type="application/rss+xml" />
<link href="http://www.iteye.com/stylesheets/homepage.css?1263389049" media="screen" rel="stylesheet" type="text/css" />
</head>
...省略,证明以上代码已经成功
当然这个只是大刀一小试。现在还离我的目标差一点点:
需要做个头,我还不太清楚有什么头可以使用,那样我又写了个程序看看IE的头到底是怎样子的,
没有抓包程序,只好自已写个程序:
Java代码
ServerSocket socketServer = new ServerSocket(10086);
Socket client = socketServer.accept();
InputStream inClient = client.getInputStream();
Scanner inScn = new Scanner(inClient);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
inScn.close();
client.close();
socketServer.close();
ServerSocket socketServer = new ServerSocket(10086);
Socket client = socketServer.accept();
InputStream inClient = client.getInputStream();
Scanner inScn = new Scanner(inClient);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
inScn.close();
client.close();
socketServer.close();
在IE地址栏上输入:
http://locahost:10086/
点确定后可以得到程序输出:
Java代码
GET / HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Accept-Encoding: gzip, deflate
Host: localhost:10086
Connection: Keep-Alive
GET / HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Accept-Encoding: gzip, deflate
Host: localhost:10086
Connection: Keep-Alive
分析请求包中这六个头信息。可以参考以下文章:
http://zsxxsz.iteye.com/blog/568250
现在我使用HC模拟IE的请求,修改后代码如下:
Java代码
HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet("http://www.iteye.com");
get.setHeader("Accept", "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");
get.setHeader("Accept-Language","zh-CN");
get.setHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)");
get.setHeader("Accept-Encoding","gzip, deflate");
get.setHeader("Host","you never be know");
get.setHeader("Connection","Keep-Alive");
HttpResponse response = httpClient.execute(get);
发表评论
-
synchronized(this)的一些理解
2011-12-06 18:58 1013对synchronized(this)的 ... -
Comparator和Comparable在排序中的应用
2011-07-30 11:21 899当需要排序的集合或数组不是单纯的数字型时,通常可以使用Co ... -
如何将文件中Base64进制数据生成X509证书
2010-12-16 19:50 2765byte[] ciphertext1 = new BASE64 ... -
Java相关数字签名技术纪要
2010-12-16 18:59 1210一:需要包含的包 ... -
jdom通过string生产xml文档
2010-12-09 10:50 1079生产xml文档: XMLOutputter outpu ... -
Tomcat支持Https访问
2010-11-10 20:01 3191用Tomcat来配置SSL主要有下面这么两大步骤: 一、生成证 ... -
一个tomcat配置多个端口
2010-10-19 18:43 3076第一步、修改server.xml[..\Tomcat 6.0\ ... -
Servlet上传文件及发送HTTP请求至Servet上传文件。
2010-08-12 18:30 1658Servlet接受HTTP消息,解析内容并输出至文件中 // ... -
如何在工程指定目录下保存文件。
2010-08-11 18:59 12041:Servlet中 String fileDir ... -
各进制基本概念。
2010-07-30 12:26 1153二进制: 二进制是逢2进位的进位制,0、 ... -
Junit小结
2010-07-20 08:58 656一 几个常用注释 @Before 被它注释的方法, ... -
JMockit_UT小结
2010-07-15 16:11 11551:模拟方法抛出异常 fin ... -
如何将当前时间延迟至指定的年、月、日后日期。
2010-06-23 19:27 1030Calendar cale = Calenda ... -
tomcat添加gzip功能
2010-03-04 15:24 2018在文件tomcat/conf/server.xml 中添加红 ... -
ThreadLocal知识
2009-11-14 21:57 2703首先,ThreadLocal 不是用来解决共享对象的多线程访问 ... -
一个不错的JDBC连接池教程(带具体例子)
2009-06-11 21:17 1255关键字: jdbc 1.前言 数据库应用,在许多软件系统中 ... -
Java程序对图片的各种处理
2009-06-11 21:12 1619关键字: 缩放图像、图像切割、图像类型转换、彩色转为黑白 Ja ... -
Java计算时间差
2009-06-11 21:10 5838比如:现在是2004-03-26 13:31:40 ... -
Unable to instantiate Action(关于struts2.0异常)
2009-05-17 20:39 7795[ERROR] - [2009-03-12 14:27:59] ... -
怎么实现jdk6运行,而使用jdk5编译
2009-05-12 22:05 1329步骤: 1:eclipse->window->pr ...
相关推荐
`httpClient笔记.docx`可能是用户或教程作者整理的关于使用HttpClient的笔记或实战案例,可能包括一些常见问题的解决方案,比如处理重定向、处理cookies、上传下载文件、使用HTTPS等。 学习HttpClient时,除了API...
HttpClient学习笔记 模拟测试浏览器表单提交
以下是一些关于 HttpClient 4.5 的重要知识点: 1. **HttpClient 创建与配置**: HttpClient 4.5 提供了 `HttpClients.createDefault()` 方法,用于创建默认的、可关闭的 HTTP 客户端实例。全局使用一个客户端可以...
6. **连接管理**: HttpClient 内置了连接管理器,可以控制并发连接的数量,自动检测并关闭失效连接,适应多线程应用。 7. **持久连接**:支持HTTP/1.0的KeepAlive和HTTP/1.1的持久连接,提高效率。 8. **直接访问...
HttpClient 特别强调了在多线程环境中的连接管理和性能优化,能够处理代理、SSL/TLS 安全连接、认证以及文件上传等功能。 在使用 HttpClient 之前,可能需要进行一些预备工作。例如,如果你的 JRE 版本是 1.3.* ...
1、使用HttpClient发送GET请求: 2、使用HttpClient发送POST请求:和之前的GET类似 3、使用异步HttpClient发送请求,可以在github上找一些别人已经写好的代码,封装度比较高,直接拿来用。 4、多线程下载:使用...
《淘淘商城笔记》主要涵盖了Java技术在电商系统开发中的应用,这是一份详细记录了淘淘商城系统架构和技术选型的学习文档。由于文件名仅给出"笔商城记",推测这可能是文档的部分章节或者子目录,具体内容可能包括但不...
HttpClient是Apache开源组织提供的一个Java库,用于执行HTTP请求。...通过阅读官方文档和相关的学习笔记(如HttpClient学习笔记.doc),可以进一步深化对HttpClient的理解,掌握其高级特性和最佳实践。
标题 "有道云笔记内容下载java版,有道云...它利用了Java的网络请求库(如HttpURLConnection或Apache HttpClient)、JSON解析库(如Jackson或Gson)以及文件操作功能,为用户提供了便捷的数据备份和本地化管理方式。
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。
Apache是Java生态系统中的一个重要组成部分,它不仅是一个开源的Web服务器,也是许多Java库和框架(如Apache HttpClient、Apache Tomcat等)的开发者。这些库和框架简化了开发过程,提供了诸如HTTP通信、应用服务器...
你还能了解到URL、URLConnection以及HTTPClient的相关知识,这些都是构建网络应用的关键。 此外,笔记中还包含了对Tomcat服务器的介绍和使用。Tomcat是一款轻量级的Java Web应用服务器,是初学者部署和运行Servlet...
Android学习笔记 > 十年生死两茫茫,不思量,自难忘,华年短暂,陈辞岁月悠悠伤, > 满腔热血已芜荒,展未来,后生强,战战兢兢,如履薄冰心彷徨, > 青丝化雪、鬓角成霜,已是英雄迟暮,人生怎慷慨激昂? 目录 ...
Apache是常见的开源软件项目,其产品如Tomcat(Java EE应用服务器)、HttpClient(网络通信库)、Log4j(日志框架)等在Java开发中广泛应用。笔记可能会介绍如何集成和使用这些工具。 总结,【Java狂神说笔记】是一...
笔记不仅涵盖了项目的具体实施细节,还涉及到了多种技术手段的运用,如JSONP、HttpClient等,这些技术在实际开发过程中起到了关键作用。 #### 二、跨域访问解决方案:JSONP 跨域问题一直是前端开发中的一个重要...
### jt08工作笔记知识点梳理 #### 商品详情页与前后端交互 - **商品详情页设计**:在项目04中,商品详情页是前端与后端交互的关键环节。前端负责展示商品信息,而后端则负责组织并提供这些信息。 - **前后端交互...
6. **网络通信**:了解如何使用HttpClient或WebClient进行网络请求,以及如何处理JSON或XML数据。 7. **权限管理**:Android应用需要声明和管理权限,笔记会介绍如何在AndroidManifest.xml中配置权限。 8. **调试...
前面一篇Android开发笔记之:AsyncTask的应用较为详细的讲述了Asynctask的原理与应用,这里来结合使用一下HttpClient与Asynctask~ 代码编写如下: 服务器代码我就不写出来了,就是一个用户名和密码~ 1.写一个类...