版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、HttpClient4.1 Tutorial利用官方例子讲解httpClient4.1的用法HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文利用官方例子来介绍HttpClient的用法。wanghe2011-3-14目 录HttpClient简介41)百科名片:42)HttpClient 的范围43)httpClient 特性4HttpClient基本功能的使用6a)环境准备6b)几个主要类解释6c)第一个程序6d)如何传递参数8e)模
2、拟表单登录10f)HttpClient连接SSL121)生成KeyStore122)配置tomcat服务器支持SSL133)用浏览器访问你的应用154)用httpClient访问https150.9第一个版本.仅简单的几个例子和SSL访问wangheHttpClient简介1) 百科名片:HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpCl
3、ient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.1.2) HttpClient 的范围 基于HttpCore的客户端HTTP运输实现库 基于经典(阻塞)I/O 内容无关3) httpClient 特性 基于标准,纯净的j
4、ava语言.实现了Http1.0和Http1.1 以可扩展的面向对象的结构实现了Http全部的方法 (GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE). 支持HTTPS协议. 通过Http代理建立透明的连接. 利用CONNECT 方法通过Http代理建立隧道的https连接. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 认证方案. 插件式的自定义认证方案. 便携可靠的套接字工厂使它更容易的使用第三方解决方案. 连接管理器支持多线程应用.支持设置最大连接数,同时支持
5、设置每个主机的最大连接数.发现并关闭过期的连接. Automatic Cookie handling for reading Set-Cookie: headers from the server and sending them back out in a Cookie: header when appropriate. 插件式的自定义Cookie策略. Request output streams to avoid buffering any content body by streaming directly to the socket to the server. Response i
6、nput streams to efficiently read the response body by streaming directly from the socket to the server. 在http1.0和http1.1中利用KeepAlive保持持久连接. 直接获取服务器发送的response code和 headers. 设置连接超时的能力. 实验性的支持http1.1 response caching. 源代码基于Apache License 可免费获取.HttpClient基本功能的使用a) 环境准备 从apache下载httpClient; 下载地址: ; 解压、
7、将lib下的jar导入工程;b) 几个主要类解释HttpClientHttpClient代表了一个http的客户端,HttpClient接口定义了大多数基本的http请求执行行为.HttpEntityentity是发送或者接收消息的载体。entities 可以通过request和response获取到.HttpConnectionHttpConnection代表了一个http连接。c) 第一个程序/创建默认的httpClient实例.HttpClient httpclient = new DefaultHttpClient();try /创建httpget. HttpGet httpget =
8、 new HttpGet();System.out.println(executing request + httpget.getURI();/执行get请求. HttpResponse response = httpclient.execute(httpget);/获取响应实体 HttpEntity entity = response.getEntity();System.out.println(-);/打印响应状态 System.out.println(response.getStatusLine(); if (entity != null) /打印响应内容长度 System.out.pr
9、intln(Response content length: + entity.getContentLength();/打印响应内容 System.out.println(Response content: + EntityUtils.toString(entity); System.out.println(-); finally /关闭连接,释放资源 httpclient.getConnectionManager().shutdown(); 输出:executing request -HTTP/1.1 200 OKResponse content length: 6759Response c
10、ontent: 百度一下,你就知道 (此处省略打印信息)-d) 如何传递参数 public void serivceJ() try HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request = ServletActionContext.getRequest(); System.out.println(request.serivceJ); response.setCharacterEncoding(UTF-8); String type = request.getPa
11、rameter(type); String c = none; if(type.equalsIgnoreCase(car) c = Hello:给你一辆宝马; else if(type.equalsIgnoreCase(house) c = Hello:给你一栋别墅; response.getWriter().write(c); catch (IOException e) e.printStackTrace();/创建默认的httpClient实例.HttpClient httpclient = new DefaultHttpClient();/创建httppostHttpPost httpp
12、ost = new HttpPost();/创建参数队列List formparams = new ArrayList();formparams.add(new BasicNameValuePair(type, house);UrlEncodedFormEntity uefEntity;try uefEntity = new UrlEncodedFormEntity(formparams, UTF-8);httppost.setEntity(uefEntity);System.out.println(executing request + httppost.getURI();HttpRespo
13、nse response;response = httpclient.execute(httppost);HttpEntity entity = response.getEntity();if (entity != null) System.out.println(-);System.out.println(Response content: + EntityUtils.toString(entity,UTF-8);System.out.println(-); catch (ClientProtocolException e) e.printStackTrace();catch(Unsuppo
14、rtedEncodingException e1) e1.printStackTrace();catch (IOException e) e.printStackTrace();finally /关闭连接,释放资源httpclient.getConnectionManager().shutdown();输出:executing request -Response content: Hello:给你一栋别墅-e) 模拟表单登录 /index.jsp /error.jsp public String serivceJ() HttpServletRequest request = ServletAc
15、tionContext.getRequest(); System.out.println(request.serivceJ); String username = request.getParameter(username);String password = request.getParameter(password); if(username.equalsIgnoreCase(admin)& password.equalsIgnoreCase(123456) return success; return error;/创建默认的httpClient实例.HttpClient httpcli
16、ent = new DefaultHttpClient();/创建httppostHttpPost httppost = new HttpPost();/创建参数队列List formparams = new ArrayList();formparams.add(new BasicNameValuePair(username, admin);formparams.add(new BasicNameValuePair(password, 123456);UrlEncodedFormEntity uefEntity;try uefEntity = new UrlEncodedFormEntity(
17、formparams, UTF-8);httppost.setEntity(uefEntity);System.out.println(executing request + httppost.getURI();HttpResponse response;response = httpclient.execute(httppost);HttpEntity entity = response.getEntity();if (entity != null) System.out.println(-);System.out.println(Response content: + EntityUtil
18、s.toString(entity,UTF-8);System.out.println(-); catch (ClientProtocolException e) e.printStackTrace();catch(UnsupportedEncodingException e1) e1.printStackTrace();catch (IOException e) e.printStackTrace();finally /关闭连接,释放资源httpclient.getConnectionManager().shutdown();会将返回的jsp输出:executing request -Res
19、ponse content: 测试页面hello:登录成功-f) HttpClient连接SSL1) 生成KeyStore打开cmd,输入(jdk环境变量当然是配置好的):keytool -genkey -alias tomcat -keyalg RSA validity 60 -keystore D:tomcat.keystorecmd输出:输入keystore密码:*您的名字与姓氏是什么?Unknown: localhost您的组织单位名称是什么?Unknown: it您的组织名称是什么?Unknown: dev您所在的城市或区域名称是什么?Unknown: bj您所在的州或省份名称是什么
20、?Unknown: bj该单位的两字母国家代码是什么Unknown: CNCN=localhost, OU= it, O= dev, L=bj, ST=bj, C=CN 正确吗?否: Y输入的主密码(如果和 keystore 密码相同,按回车):*参数说明:-genkey表示生成密钥-validity指定证书有效期,这里是60天-alias指定别名,这里是tomcat-keyalg指定算法,这里是RSA-keystore指定存储位置,这里是D: tomcat.keystore使用的自定义密码为123456Keytool 详细命令说明请参考百度百科;*其中 您的名字与姓氏是什么? localho
21、st是网站的域名或者ip,根据实际情况填写。否者会出现证书上的名称无效;2) 配置tomcat服务器支持SSL将生成的 tomcat.keystore文件,放到%TOMCAT_HOME%/conf目录中(其他也OK).这样你的tomcat就支持https访问了;属性说明(来源网上资源): port: 这个port属性(默认值是8443)是 TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过,在许多操作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)。redir
22、ectPort: 如果你在这里更改端口数值,你还必须更改在non-SSL连接器上的redirectPort 这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制页面的用户,指明根据 Servlet 2.4 Specification要求,SSL是必需的clientAuth: 如果你想要Tomcat要求所有的SSL客户在使用这个socket时出示用户认证书,把这个值设定为 true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认证书也可以, 就把这个值设定为want 。keystoreFile: 如果你产生的keystore文件不在Tomcat期望的默认地
23、方(一个叫做.keystore 的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名称, 或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。keystorePass: 如果你使用一个不同的keystore(以及认证书)密码,而不是Tomcat期望的密码 (就是changeit),添加这个元素。keystoreType: 如果使用一个PKCS12 keystore的话,就添加这个element。 有效的值是JKS 和 PKCS12sslProtocol: 要在这个socket上被使用的加密解密协定。如果你在使用Sun的JVM,我们不提倡更改 这个值。据报
24、道,TLS协定的IBMs 1.4.1 实现与一些通用的浏览器不兼容。 如果是这样,就使用value SSL ciphers: 这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,任何可用的密码都允许被使用。algorithm: 可用的X509算法。默认是Sun的实现( SunX509 )。 对于IBM JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。truststoreFile: 用来验证用户认证书的TrustStore文件。truststorePass: 访问TrustStore的密码。默认值就是keystorePass的值。trust
25、storeType: 如果你在使用与KeyStore不同格式的TrustStore,添加这个元素。 合法的值是JKS和PKCS12keyAlias: 如果 keystore 里面有多个 key,你可以为用这个选项为加入的 key 起一个名字。 如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用3) 用浏览器访问你的应用输入:你会发现: 你的应用已经处于SLL安全通道中了.4) 用httpClient访问httpspublic class ClientCustomSSL public final static void main(String args) throws E
26、xception DefaultHttpClient httpclient = new DefaultHttpClient(); try KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType(); instream = new (new File(d:tomcat.keystore); try /加载keyStore d:tomcat.keystore trustStore.load(instream, 123456.toCharArray(); finally try instream.close(); catc
27、h (Exception ignore) /穿件Socket工厂,将trustStore注入 SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);/创建Scheme Scheme sch = new Scheme(https, 8443, socketFactory); /注册Scheme httpclient.getConnectionManager().getSchemeRegistry().register(sch); /创建http请求(get方式) HttpGet httpget = new HttpGet(myDemo/Ajax/serivceJ.action); System.out.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人护理跨学科合作
- 神经系统护理:评估与康复
- 2026年碳封存工程环境安全评估与减排量核算数据支持体系构建
- 2026年生物医学新技术临床应用条例合规指引
- 2026年量子隐形传态与量子纠缠分发技术进展
- 2026年月球资源勘测系统工程卫星星座部署方案
- 2026年电堆功率密度提升与贵金属用量降低平衡
- 烟雾病并发症的预防与护理
- 护理专业职业发展
- 2026年高风险机构有序退出:市场化退出与保护金融消费者权益的平衡术
- 2025年河北省唐山市开平区留置辅警笔试真题附答案解析
- 2026年及未来5年中国钓鱼船行业市场调查研究及投资前景预测报告
- 无线电少儿科普
- 心脏按压肋骨骨折课件
- 2025年大学《治安学-治安秩序管理》考试备考试题及答案解析
- 2025年蚌埠市中考试题及答案
- 实验室电路施工方案
- 车间安全生产检查记录表
- 2025年机关事业单位工勤技能岗位等级考核试题机关工勤等级考试附答案
- 2025年湖北省烟草专卖局(公司)招聘206人笔试参考题库附带答案详解
- 2025年安徽省综合类事业单位招聘考试公共基础知识真题试卷及参考答案
评论
0/150
提交评论