调用hue的接口

想要调用第三方接口,就得进行第三方的登录验证。

hue的登录验证大概分为三步:

1.get请求:

加入username和password,请求之后,会返回一个sessionId。

2.拿第一次请求的sessionId在进行第二次的post登录请求,和第一次的请求路径一样,只是因为是post,在路径最后加/

然后sessionid 和 username 还有password作为参数

接下来就是重点代码,图一张,注:截图代码

public static Map<String, String> doPost(String url, Map<String,String> params) {
		Map<String, String> map = new HashMap<String, String>();
		BufferedReader in = null;
		try {
			CookieStore cookieStore = new BasicCookieStore();
			// 定义HttpClient
			HttpClient client = new DefaultHttpClient();
			client = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
			// 实例化HTTP方法
			HttpPost request = new HttpPost();
			request.setURI(new URI(url));
			request.addHeader("Content-Type", "application/x-www-form-urlencoded");
			request.addHeader("Cookie", "csrftoken=" + params.get("csrftoken") + "; sessionid=" + params.get("sessionId") + "; _gat=1");
			request.addHeader("X-CSRFToken", "" + params.get("csrftoken") + "");
			String encoding = DatatypeConverter
					.printBase64Binary((params.get("username") + ":" + params.get("password")).getBytes(CHARSET));
			request.setHeader("Authorization", "Basic " + encoding);
			// 设置参数
			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
			for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
				String name = (String) iter.next();
				String value = String.valueOf(params.get(name));
				nvps.add(new BasicNameValuePair(name, value));
			}
			request.setEntity(new UrlEncodedFormEntity(nvps, CHARSET));

			HttpResponse response = client.execute(request);
			List<Cookie> cookies = cookieStore.getCookies();
			//System.out.println("cppkies:"+cookies);
			for(Cookie cookie:cookies){
				System.out.println("cppkies:"+cookie);
			}
			for (int i = 0; i < cookies.size(); i++) {
				if (cookies.get(i).getName().equals("sessionid")) {
					map.put("sessionId", cookies.get(i).getValue());
				}
				if (cookies.get(i).getName().equals("csrftoken")) {
					map.put("csrftoken", cookies.get(i).getValue());
				}
			}
			int code = response.getStatusLine().getStatusCode();
			if (code == 200) { // 请求成功
				in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), CHARSET));
				StringBuffer sb = new StringBuffer("");
				String line = "";
				String NL = System.getProperty("line.separator");
				while ((line = in.readLine()) != null) {
					sb.append(line + NL);
				}
				in.close();
				map.put("responseStr", sb.toString());
			} else { //
				System.out.println("状态码:" + code);
				return map;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return map;
	}

第二次会返回一个新的sessionId。也会有新的csrftoken。

3.之后的每次请求接口,在参数中把第二次获取的sessionID传过去就可以了。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值