使用httpclient免登录访问

    在实际应用中,向服务端获取数据,每次都需要登录,十分麻烦。希望登录一次后,在一定时间内不需要再次登录,就能直接访问服务了。
    要实现该功能,也十分简单,首先需要服务端支持记住我的功能,客户端登录的时候选择记住我,这个时候服务端就会把记住我的信息存在cookie中返回给客户端,客户端后面登录的时候只需要带上这个cookie中的值,就可以直接免登录了
    具体实现代码:

第一步,模拟登录请求,保存cookie
public static List<String> sendLogin(String url) {
		List<String> list = new ArrayList<String>();
		HttpGet request = new HttpGet(url);
		try {
			HttpResponse response = HttpClients.createDefault()
					.execute(request);
			if (response.getStatusLine().getStatusCode() == 200) {
				String result = EntityUtils.toString(response.getEntity());
                                // 从响应消息中获取cookie中的rememberMe值,并保存到list中,供后面使用
				Header[] hhh = response.getHeaders("Set-Cookie");
				for (Header t : hhh) {
					String v = t.getValue();
					if (v.startsWith("rememberMe")) {
						list.add(v);
					}
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return list;
	}

第二步,使用返回的cookie值,发送直接请求
public static String getDate(String url, List<String> cookies) {
		HttpGet request = new HttpGet(url);
		try {
			for (String cookie : cookies) {
				request.addHeader("Cookie", cookie);
			}

			HttpResponse response = HttpClients.createDefault()
					.execute(request);
			if (response.getStatusLine().getStatusCode() == 200) {
				String result = EntityUtils.toString(response.getEntity());
				return result;

			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return null;
	}


第一次获取的cookie值也可以保存在文件,下次直接使用cookie值进行请求,而不需要再次登录。
该功能对于服务端也有要求,对于第二次请求的url,在服务端设置对于记住我功能可以访问。

需要的jar包:
               <dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.4.1</version>
		</dependency>

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5</version>
		</dependency>

猜你喜欢

转载自shenjianhua1984.iteye.com/blog/2223940