JAVA: httpclient 详解——第三章;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是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);
		// 服务器发送过来的属性都必须保留
		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,供服务器使用
			.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();

	}
时间: 2024-10-10 15:17:57

JAVA: httpclient 详解——第三章;的相关文章

JAVA: httpclient 详解——第五章;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者: httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,以及翻译) 须要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache

JAVA: httpclient 详解——第六章;

httpclient 详解--第一章: httpclient 详解--第二章: httpclient 详解--第三章: httpclient 详解--第四章: httpclient 详解--第五章: httpclient 详解--第六章: httpclient 详解--第七章: 相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.htt

JAVA: httpclient 详解——第七章;

httpclient 详解--第一章: httpclient 详解--第二章: httpclient 详解--第三章: httpclient 详解--第四章: httpclient 详解--第五章: httpclient 详解--第六章: httpclient 详解--第七章: 相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.htt

JAVA: httpclient 详解——第四章;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者: httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,以及翻译) 须要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache

JAVA: httpclient 详解——第二章;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者: httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,以及翻译) 须要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache

JAVA: httpclient 详解;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者: httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,以及翻译) 须要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache

Java 多线程详解(三)------线程的同步

Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程:http://www.cnblogs.com/ysocean/p/6883491.html 介绍完如何创建进程以及线程了,那么我们接着来看一个实例: 利用多线程模拟 3 个窗口卖票 第一种方法:继承 Thread 类 创建窗口类 TicketSell package com.ys.thread; p

Java IO详解(三)------字节输入输出流

File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocean/p/6854098.html 那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream)  1.字节输出流:OutputStream public abstrac

java线程详解(三)

java线程间通信 首先看一段代码 class Res { String name; String sex; } class Input implements Runnable { private Res r; Input(Res r) { this.r = r; } public void run() { int x = 0; while(true){ if(x==0){ r.name = "mike"; r.sex = "male"; } else{ r.nam