JAVA : HttpClient를 특정 설명 - 제 3 장;


HttpClient를 특정 설명 - 첫 번째 챕터.

HttpClient를 특정 설명 - 제 2 장;

HttpClient를 특정 설명 - 제 3 장;

HttpClient를 특정 설명 - 제 IV; 

HttpClient를 특정 설명 - 다섯 번째 장.

HttpClient를 특정 설명 - 장 VI;

HttpClient를 특정 설명 - 제 VII;


HttpURLConnection의, HttpClient를 더 강력하고 풍부한 상대,이 개 프로젝트는 아파치 HttpClient를 사이가되어 있습니다. 패키지는 commonts이다. 이것은 일반적이다. 더 많은 전문가는 org.apache.http. 포장을 받고있다. 그래서 일반적으로 후자를 사용;


HttpClient를 오랫동안 연결을 처리 할. 세션, 재 연결 및 필터 요청, 연결 재사용 등을 저장 ...


다음은 테스트 (모든 공식 문서에서 요약, 번역) 코드


핵심 패키지를 다운로드해야합니다 : HttpClient를-4.3.4.jar를, 공식 웹 사이트에서 다운로드 할 수 있습니다 http://hc.apache.org/downloads.cgi



	//=========================== 第三章 =================================================
	
	/**
	 * 最初,Http被设计成一个无状态的协议。
	 * 网景(netscape)公司,最先在他们的产品中支持http状态管理,而且制定了一些专有规范。

* 可是。如今多数的应用的状态管理机制都在使用网景公司的规范,而网景的规范和官方规定是不兼容的。 */ private static void test14(){ //===================================================== //网景版本号的Cookie ,网景版本号是0 。标准版本号是1 BasicClientCookie netscapeCookie = new BasicClientCookie("name", "value"); netscapeCookie.setVersion(0); /** * 跨域訪问设置domain方式: “.” + other.com,这样在 other.com域下能够获取cookie * 假设在同一应用中则设置: */ netscapeCookie.setDomain(".other.com"); /** * 能够在tomcat webapps目录下的所有应用共享此cookie * cookie.setPath("/webapp_b/")仅仅是webapp_b应用才干获取此cookie */ netscapeCookie.setPath("/"); //===================================================== //以下是标准版的cookie(版本号为1) BasicClientCookie stdCookie = new BasicClientCookie("name", "value"); stdCookie.setVersion(1); stdCookie.setDomain(".mycompany.com"); stdCookie.setPath("/"); stdCookie.setSecure(true); // server发送过来的属性都必须保留 stdCookie.setAttribute(ClientCookie.VERSION_ATTR, "1"); stdCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com"); //===================================================== //创建了Set-Cookie2兼容cookie。 BasicClientCookie2 cookie2 = new BasicClientCookie2("name", "value"); cookie2.setVersion(1); cookie2.setDomain(".mycompany.com"); cookie2.setPorts(new int[] {80,8080}); cookie2.setPath("/"); cookie2.setSecure(true); cookie2.setAttribute(ClientCookie.VERSION_ATTR, "1"); cookie2.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com"); cookie2.setAttribute(ClientCookie.PORT_ATTR, "80,8080"); //===================================================== //自己实现CookieSpec接口,然后创建一个CookieSpecProvider接口来新建、 //初始化自己定义CookieSpec接口。最后把CookieSpecProvider注冊到HttpClient中。 //一旦我们注冊了自己定义策略,就能够像其它标准策略一样使用了。 CookieSpecProvider easySpecProvider = new CookieSpecProvider() { public CookieSpec create(HttpContext context) { return new BrowserCompatSpec() { @Override public void validate(Cookie cookie, CookieOrigin origin) throws MalformedCookieException { // Oh, I am easy } }; } }; Registry<CookieSpecProvider> r = RegistryBuilder .<CookieSpecProvider> create() //最佳适配标准工厂 .register(CookieSpecs.BEST_MATCH, new BestMatchSpecFactory()) //BrowserCompatSpecFactory 浏览器兼容标准工厂 .register(CookieSpecs.BROWSER_COMPATIBILITY,new BrowserCompatSpecFactory()) .register("easy", easySpecProvider) .build(); RequestConfig requestConfig = RequestConfig.custom() .setCookieSpec("easy") .build(); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultCookieSpecRegistry(r) .setDefaultRequestConfig(requestConfig) .build(); } /** * cookie持久化 */ private static void test15(){ CookieStore cookieStore = new BasicCookieStore(); BasicClientCookie cookie = new BasicClientCookie("name", "value"); cookie.setVersion(0); cookie.setDomain(".mycompany.com"); cookie.setPath("/"); //BasicCookieStore中的Cookie,当载体对象被当做垃圾回收掉后,就会丢失。 cookieStore.addCookie(cookie); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultCookieStore(cookieStore) //设置cookie,供server使用 .build(); } /** * 通过HttpClientContext 设置cookie 以及cookie标准 * * CookieSpec对象 代表实际的Cookie规范。

CookieOrigin对象 代表实际的origin server的具体信息。 CookieStore对象 。这个属性集中的值会代替默认值。 我们也能够在不同的线程中使用不同的运行上下文。 我们在http请求层指定的cookie规范集和cookie store会覆盖在http Client层级的默认值。

*/ private static void test16() throws ClientProtocolException, IOException{ CloseableHttpClient httpclient = HttpClients.createDefault(); HttpClientContext context = HttpClientContext.create(); CookieStore cookieStore = new BasicCookieStore(); //cookieStore 存放cookie............. Registry<CookieSpecProvider> r = RegistryBuilder .<CookieSpecProvider> create() //最佳适配标准工厂 .register(CookieSpecs.BEST_MATCH, new BestMatchSpecFactory()) //BrowserCompatSpecFactory 浏览器兼容标准工厂 .register(CookieSpecs.BROWSER_COMPATIBILITY,new BrowserCompatSpecFactory()) .build(); context.setCookieSpecRegistry(r); context.setCookieStore(cookieStore); HttpGet httpget = new HttpGet("http://www.baidu.com"); httpclient.execute(httpget, context); // Cookie origin details CookieOrigin cookieOrigin = context.getCookieOrigin(); // Cookie spec used CookieSpec cookieSpec = context.getCookieSpec(); }



추천

출처www.cnblogs.com/mqxnongmin/p/10951275.html