package com.yoghurt.crypto.transactions.server.util; import java.io.IOException; import java.net.URISyntaxException; import org.apache.http.HttpEntity; import org.apache.http.HttpException; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import com.google.gwt.core.shared.GWT; /** * Wrapper to get remote content and return it as an inputstream simply. */ public class HttpClientProxy { private static final int TIMEOUT = 5 * 1000; private final static RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(TIMEOUT).build(); public static HttpEntity getRemoteContent(final CloseableHttpClient client, final String url) throws ClientProtocolException, ParseException, URISyntaxException, IOException, HttpException { return getRemoteContent(client, false, url); } public static HttpEntity getRemoteContent(final HttpClient client, final boolean unsafe, final String url) throws URISyntaxException, ClientProtocolException, IOException, ParseException, HttpException { return executeRemoteContent(client, unsafe, new HttpGet(url)); } public static HttpEntity postRemoteContent(final HttpClient client, final String url, final String payload) throws ClientProtocolException, ParseException, IOException, HttpException { return postRemoteContent(client, false, url, payload); } public static HttpEntity postRemoteContent(final HttpClient client, final boolean unsafe, final String url, final String payload) throws ClientProtocolException, IOException, ParseException, HttpException { final HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new StringEntity(payload)); return executeRemoteContent(client, unsafe, httpPost); } public static HttpEntity postRemoteContent(final CloseableHttpClient client, final boolean unsafe, final String uri, final String req, final HttpClientContext localContext) throws ClientProtocolException, ParseException, IOException, HttpException { final HttpPost httpPost = new HttpPost(uri); httpPost.setEntity(new StringEntity(req)); return executeRemoteContent(client, unsafe, httpPost, localContext); } private static HttpEntity executeRemoteContent(final HttpClient client, final boolean unsafe, final HttpUriRequest request) throws ClientProtocolException, IOException, ParseException, HttpException { return executeRemoteContent(client, unsafe, request, null); } private static HttpEntity executeRemoteContent(final HttpClient client, final boolean unsafe, final HttpUriRequest request, final HttpClientContext localContext) throws ClientProtocolException, IOException, ParseException, HttpException { final HttpResponse httpResponse = client.execute(request); if (unsafe || httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { GWT.log("Done."); return httpResponse.getEntity(); } else { throw new HttpException(httpResponse.getStatusLine().toString() + EntityUtils.toString(httpResponse.getEntity())); } } public static CloseableHttpClient buildProxyClient() { return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build(); } }