HttpClient4.5如何获取cookie值

一、什么是httpclient

超文本传输​​协议(HTTP)可能是当今Internet上使用的最重要的协议。Web服务,支持网络的设备和网络计算的增长继续将HTTP协议的作用扩展到用户驱动的Web浏览器之外,同时增加了需要HTTP支持的应用程序的数量。

尽管java.net软件包提供了用于通过HTTP访问资源的基本功能,但它并未提供许多应用程序所需的全部灵活性或功能。HttpClient试图通过提供高效,最新且功能丰富的程序包来实现此空白,以实现最新HTTP标准和建议的客户端。

HttpClient是为扩展而设计的,同时提供了对基本HTTP协议的强大支持,对于构建HTTP感知的客户端应用程序(例如Web浏览器,Web服务客户端或利用或扩展HTTP协议进行分布式通信的系统)的任何人来说,HttpClient都可能会感兴趣。

HttpClient不是浏览器。它是一个HTTP通信库,因此它仅提供通用浏览器应用程序期望的功能子集。

最根本的区别是HttpClient中没有用户界面,不执行js脚本。浏览器需要显示页面,并解释用户输入,例如在显示页面上某处的鼠标单击。有一个布局引擎可以计算应如何显示HTML页面,包括级联样式表和图像。JavaScript解释器运行嵌入在HTML页面中或从HTML页面引用的JavaScript代码。

HttpClient也完全与内容无关。它可以传输消息内容,但是无法以任何方式呈现或处理它。

另一个主要区别是对错误输入或违反HTTP标准的容忍度。必须对无效的用户输入具有容忍性,以使浏览器易于使用。还需要容忍从服务器检索到的格式错误的文档,以及执行协议时服务器行为的缺陷,以使用户能够访问尽可能多的网站。但是,HttpClient努力遵守HTTP标准规范和相关标准,并且尽可能默认。它还提供了放松与非兼容HTTP源或代理服务器兼容所允许或要求的,由规范施加的某些限制的方法。

二、httpclient中获取服务器端设置的cookie

cookie是从HttpContext中获取的,需要执行httpClient的带httpcontext参数的请求方法。

			//---s 创建请求
			HttpGet httpGet = new HttpGet(url);
			
			
			httpGet.setHeader("User-Agent",
			  "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
			  );
			 
			//请求配置
	        RequestConfig reqConfig = RequestConfig
	                .custom()
	                .setConnectionRequestTimeout(-1)//从连接池阻塞的时限-永久阻塞
	                .setConnectTimeout(8000) // 设置连接超时时间
	                .setSocketTimeout(8000) // 设置读取超时时间
	                .setExpectContinueEnabled(false)
	                .setCircularRedirectsAllowed(true) // 允许多次重定向
	                .setCookieSpec(CookieSpecs.STANDARD_STRICT )
	                .build();

	        httpGet.setConfig(reqConfig);
	        //---e 创建请求
	        
	        
	        //---创建httpcontext
	        HttpClientContext context = HttpClientContext.create();
	        
	        
	        //---s 执行请求
			try {
				String respBody = httpClient.execute(httpGet,new ResponseHandler() {

					@Override
					public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
						 int status = response.getStatusLine().getStatusCode();
						 System.out.println("响应状态码=" + status);
						 
					        if (status >= 200 && status < 300) {					        	
					            HttpEntity entity = response.getEntity();
					            return entity != null ? EntityUtils.toString(entity,"utf-8") : null;
					        } else {
					            throw new ClientProtocolException("Unexpected response status: " + status);
					        }
					}
				},context);
				
				System.out.println("响应内容=" + respBody);
				
				
				//通过context获取cookieStore
				CookieStore cookieStore = context.getCookieStore();
	        	 // 获取cookies信息
	            List cookies = cookieStore.getCookies();
	            
	            if(cookies.size()==0) {
	            	System.err.println("=========无cookie=========");
	            }
	            
	            for (Cookie cookie : cookies) {
	                String name = cookie.getName();
	                String value = cookie.getValue();
	                String domain = cookie.getDomain();
	                String path = cookie.getPath();
	                
	                SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	                Date date = cookie.getExpiryDate();
	                System.out.println("cookies: key= "+ name + "  value= " + value +" domain="+domain +" path="+path+"  过期时间"+sdf1.format(date));
	            }
				
			} catch (Exception e) {
				e.printStackTrace();
			}
			
			//---e 执行请求

 

如若转载,请注明出处:https://www.javaidea.cn/article/8162.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。