httpclient 4.5.1---状态管理

来源:互联网 发布:双色球霸主软件怎么样 编辑:程序博客网 时间:2024/04/20 10:29
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 attributescookie.setDomain(".mycompany.com");cookie.setPath("/");//Set attributes exactly as sent by the servercookie.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 storeCookieStore cookieStore=new BasicCookieStore();//Populate cookies if neededBasicClientCookie cookie=new BasicClientCookie("name", "value");cookie.setDomain(".mycompany.com");cookie.setPath("/");cookieStore.addCookie(cookie);//Set the storeCloseableHttpClient 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 detailsCookieOrigin cookieOrigin = context.getCookieOrigin();//Cookie spec usedCookieSpec cookieSpec = context.getCookieSpec();}}

0 0
原创粉丝点击