httpclient 4.5.1---状态管理
2016-03-27 21:47
543 查看
package com.cycore.dbs.common.demo.hc; import java.io.IOException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CookieStore; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.config.Lookup; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.util.PublicSuffixMatcher; import org.apache.http.conn.util.PublicSuffixMatcherLoader; import org.apache.http.cookie.ClientCookie; import org.apache.http.cookie.CookieOrigin; import org.apache.http.cookie.CookieSpec; import org.apache.http.cookie.CookieSpecProvider; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.impl.cookie.DefaultCookieSpecProvider; import org.apache.http.impl.cookie.RFC6265CookieSpecProvider; public class HcStateManagementDemo { /** * 创建客户端cookie对象 */ public void m1(){ BasicClientCookie cookie = new BasicClientCookie("name", "value"); //Set effective domain and path attributes cookie.setDomain(".mycompany.com"); cookie.setPath("/"); //Set attributes exactly as sent by the server cookie.setAttribute(ClientCookie.PATH_ATTR, "/"); cookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com"); } /** * cookie说明:CookieSpec接口代表了一个cookie管理说明。该说明被期望服从以下规则: * 1.Set-Cookie头的解析规则;2.解析后的cookie的验证规则;3.指定主机、端口和路径的cookie头的格式化。 * * HttpClient可以使用CookieSpec的多种实现来工作,强烈推荐在新应用中使用Standard或Standard strict策略。 * Cookie策略可以在HttpClient中设置且可根据需要在请求层覆盖掉它。 * */ public void m2(){ RequestConfig globaConfig=RequestConfig.custom() // .setCookieSpec(CookieSpecs.DEFAULT) .build(); CloseableHttpClient httpClient=HttpClients.custom() .setDefaultRequestConfig(globaConfig) .build(); RequestConfig localConfig=RequestConfig.custom() // .setCookieSpec(CookieSpecs.STANDARD_STRICT) .build(); HttpGet httpGet=new HttpGet("/"); httpGet.setConfig(localConfig); } /** * 为了实现自定义cookie策略应该创建一个CookieSpec接口的自定义实现, * 创建一个CookieSpecProvider实现去创建和初始化自定义说明的实例和用HttpClient注册工厂。 * 一旦自定义说明被注册,它可以和标准cookie说明一样被激活。 */ public void m3(){ PublicSuffixMatcher publicSuffixMatcher=PublicSuffixMatcherLoader.getDefault(); Registry<CookieSpecProvider> r=RegistryBuilder.<CookieSpecProvider>create() // .register(CookieSpecs.DEFAULT, new DefaultCookieSpecProvider(publicSuffixMatcher)) .register(CookieSpecs.STANDARD, new RFC6265CookieSpecProvider(publicSuffixMatcher)) // .register("easy", new EasySpecProvider()) .build(); RequestConfig requestConfig=RequestConfig.custom() .setCookieSpec("easy") .build(); CloseableHttpClient httpClient=HttpClients.custom() .setDefaultCookieSpecRegistry(r) .setDefaultRequestConfig(requestConfig) .build(); } /** * cookie持久化:HttpClient能和一个实现了CookieStore接口的持久化cookie存储的 * 任何物理表现形式一起工作。默认的CookieStore实现叫BasicCookieStore实际上是基于 * java.util.ArrayList的简单实现。当容器对象进行垃圾回收机制时,存在BasicClientCookie中的 * cookie对象会被丢失。用户可以可根据需要提供更复杂的实现。 */ public void m4(){ //Create a local instance of cookie store CookieStore cookieStore=new BasicCookieStore(); //Populate cookies if needed BasicClientCookie cookie=new BasicClientCookie("name", "value"); cookie.setDomain(".mycompany.com"); cookie.setPath("/"); cookieStore.addCookie(cookie); //Set the store CloseableHttpClient httpClient=HttpClients.custom() .setDefaultCookieStore(cookieStore) .build(); } /** * HTTP 状态管理和执行上下文:在HTTP请求章节中HttpClient提供了如下和执行上下文相关的状态管理对象: * 1.Lookup实例代表了实际的cookie说明注册。设置在本地上下文中的该属性值优先于默认值。 * 2.CookieSpec实例代表了实际的cookie说明。 * 3.CookieOrigin实例代表了源服务器的实际详细信息。 * 4.CookieStore实例代表了实际的cookie存储。设置在本地上下文中的该属性值优先于默认值。 * * 本地的HttpContext对象可以用来定制优先于请求执行的HTTP状态管理上下文,或者在请求执行后检查它的状态。 * 用户可以使用分离的执行上下文以实现每一个用户(或每一个线程)的状态管理。 * 一个定义在本地上下文中的cookie说明注册和cookie存储将优先于设置在HTTP客户端层面的默认值。 * @throws IOException * @throws ClientProtocolException */ public void m5() throws ClientProtocolException, IOException{ Lookup<CookieSpecProvider> cookieSpecReg =RegistryBuilder.<CookieSpecProvider>create().build(); CookieStore cookieStore = new BasicCookieStore(); HttpClientContext context = HttpClientContext.create(); context.setCookieSpecRegistry(cookieSpecReg); context.setCookieStore(cookieStore); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://somehost/"); CloseableHttpResponse response1 = httpClient.execute(httpGet, context); //<...> //Cookie origin details CookieOrigin cookieOrigin = context.getCookieOrigin(); //Cookie spec used CookieSpec cookieSpec = context.getCookieSpec(); } }
相关文章推荐
- httpclient 4.5.1---连接管理
- CCF 无线网络
- httpclient 4.5.1---流式API使用
- 网络的可靠性(nyoj)
- httpclient 4.5.1---基础
- TCP/IP
- 卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
- 使用java进行http通信
- Linux网络配置
- Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图
- 网络基础概述
- ASIHTTPRequest框架使用总结系列
- 计算机网络--学习笔记
- 卷积神经网络Convolutional Neural Networks
- 斯坦福大学卷积神经网络教程UFLDL Tutorial - Convolutional Neural Network
- iOS访问https ssl和tls双向加密
- 轻量级网络请求框架MKNetworkKit介绍及使用
- Java网络编程(客户端和服务端原理)
- HTTP协议
- JavaWeb基础---从HTTP到Servlet到Jfinal