blob: 080168a4e3663ab0bd748943b397663384829e18 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.shardingsphere.ui.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
* Http client util.
*/
public final class HttpClientUtil {
private static final String ENCODING = "UTF-8";
private static final int CONNECT_TIMEOUT = 60 * 1000;
private static final int SOCKET_TIMEOUT = 60 * 1000;
/**
* Do get method.
*
* @param url url of get method
* @param headers headers of get method
* @param params parameters of get method
* @return response string of get method
* @throws IOException io exception
* @throws URISyntaxException uri syntax exception
*/
public static String doGet(final String url, final Map<String, String> headers, final Map<String, String> params) throws IOException, URISyntaxException {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet(newInstanceURIBuilder(url, params).build());
httpGet.setConfig(RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build());
packageHeader(headers, httpGet);
return getHttpClientResult(httpClient, httpGet);
}
}
/**
* Do get method with default headers.
*
* @param url url of get method
* @param params parameters of get method
* @return response string of get method
* @throws IOException io exception
* @throws URISyntaxException uri syntax exception
*/
public static String doGet(final String url, final Map<String, String> params) throws IOException, URISyntaxException {
return doGet(url, null, params);
}
/**
* Do get method with default headers and without parameters.
*
* @param url url of get method
* @return response string of get method
* @throws IOException io exception
* @throws URISyntaxException uri syntax exception
*/
public static String doGet(final String url) throws IOException, URISyntaxException {
return doGet(url, null, null);
}
/**
* Do post method.
*
* @param url url of post method
* @param headers headers of post method
* @param params parameters of post method
* @return response string of post method
* @throws IOException io exception
*/
public static String doPost(final String url, final Map<String, String> headers, final Map<String, String> params) throws IOException {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build());
packageHeader(headers, httpPost);
packageParam(params, httpPost);
return getHttpClientResult(httpClient, httpPost);
}
}
/**
* Do post method with json request body.
*
* @param url url of post method
* @param requestBody json request body
* @return response string of post method
* @throws IOException io exception
*/
public static String doPostWithJsonRequestBody(final String url, final String requestBody) throws IOException {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build());
httpPost.setHeader("Content-type", "application/json");
StringEntity requestEntity = new StringEntity(requestBody, ENCODING);
requestEntity.setContentEncoding(ENCODING);
httpPost.setEntity(requestEntity);
return getHttpClientResult(httpClient, httpPost);
}
}
private static URIBuilder newInstanceURIBuilder(final String url, final Map<String, String> params) throws URISyntaxException {
URIBuilder result = new URIBuilder(url);
if (null != params) {
for (Entry<String, String> each : params.entrySet()) {
result.setParameter(each.getKey(), each.getValue());
}
}
return result;
}
private static void packageHeader(final Map<String, String> headers, final HttpRequestBase httpMethod) {
if (null != headers) {
for (Entry<String, String> each : headers.entrySet()) {
httpMethod.setHeader(each.getKey(), each.getValue());
}
}
}
private static void packageParam(final Map<String, String> params, final HttpEntityEnclosingRequestBase httpMethod) throws UnsupportedEncodingException {
if (null != params && !params.isEmpty()) {
List<NameValuePair> nameValuePairs = new ArrayList<>();
for (Entry<String, String> each : params.entrySet()) {
nameValuePairs.add(new BasicNameValuePair(each.getKey(), each.getValue()));
}
httpMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs, ENCODING));
}
}
private static String getHttpClientResult(final CloseableHttpClient httpClient, final HttpRequestBase httpMethod) throws IOException {
try (CloseableHttpResponse httpResponse = httpClient.execute(httpMethod)) {
return isValidResponse(httpResponse) ? EntityUtils.toString(httpResponse.getEntity(), ENCODING) : "";
}
}
private static boolean isValidResponse(final CloseableHttpResponse httpResponse) {
return null != httpResponse && null != httpResponse.getEntity();
}
}