java连接kylin,api方式调用

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import org.springframework.security.crypto.codec.Base64;

import com.alibaba.fastjson.JSONObject;

/**

 * java连接数据kylin仓库工具类

 * @author songdx

 *

 */

public class KylinUtil {

private String encoding = "UTF-8";

static String ACCOUNT = "ADMIN";

static String PWD = "KYLIN";

/**

 * 使用httpcline 进行post访问

 * 

 * @throws IOException

 */

public void requestByPostMethod() throws IOException {

CloseableHttpClient httpClient = this.getHttpClient();

try {

//创建post方式请求对象

String url = "http://localhost:7070/kylin/api/query";

HttpPost httpPost = new HttpPost(url);

String sql = "select VIEW_RX_WIN_LOTTERY.GAME_ID from VIEW_RX_WIN_LOTTERY group by VIEW_RX_WIN_LOTTERY.GAME_ID ";

// 接收参数json列表 (kylin 只接受json格式数据)

JSONObject jsonParam = new JSONObject();

jsonParam.put("sql", sql);

//jsonParam.put("limit", "20");

jsonParam.put("project", "QUERY_TOOL");

StringEntity sentity = new StringEntity(jsonParam.toString(), encoding);// 解决中文乱码问题

sentity.setContentEncoding(encoding);

sentity.setContentType("application/json");

httpPost.setEntity(sentity);

//设置header信息

//指定报文头【Content-type】、【User-Agent】

httpPost.setHeader("Content-type", "application/json;charset=utf-8");

httpPost.setHeader("Authorization", this.authCode());

System.out.println("POST 请求...." + httpPost.getURI());

//执行请求

CloseableHttpResponse httpResponse = httpClient.execute(httpPost);

try {

HttpEntity entity = httpResponse.getEntity();

if (null != entity) {

//按指定编码转换结果实体为String类型

String body = EntityUtils.toString(entity, encoding);

JSONObject obj = JSONObject.parseObject(body);

System.out.println(body);

System.out.println(obj.get("results"));

}

} finally {

httpResponse.close();

}

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

this.closeHttpClient(httpClient);

}

}

/**

 * kylin 是base64加密的,访问时候需要加上加密码

 * 

 * @return

 */

private String authCode() {

String auth = ACCOUNT + ":" + PWD;

String code = "Basic " + new String(Base64.encode(auth.getBytes()));

return code;

}

/**

 * 创建httpclient对象

 * 

 * @return

 */

private CloseableHttpClient getHttpClient() {

return HttpClients.createDefault();

}

/**

 * 关闭链接

 * 

 * @param client

 * @throws IOException

 */

private void closeHttpClient(CloseableHttpClient client) throws IOException {

if (client != null) {

client.close();

}

}

public static void main(String[] args) throws IOException {

KylinUtil ky = new KylinUtil();

ky.requestByPostMethod();

}

}

2019-09-22 00:04:13

共有0条评论!

发表评论