package com.sf.monitor.utils; import com.google.common.base.Charsets; import com.google.common.io.CharStreams; import com.google.common.io.Closeables; import com.sf.log.Logger; import com.squareup.okhttp.OkHttpClient; import retrofit.ErrorHandler; import retrofit.RestAdapter; import retrofit.RetrofitError; import retrofit.client.OkClient; import retrofit.client.Response; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; public class HttpRequest { private static Logger log = new Logger(HttpRequest.class); public static <T> T create(String url, Class<T> clazz) { try { String hostPart = new URI(url).getHost(); // Check whether it is a valide url. InetAddress.getByName(hostPart); } catch (URISyntaxException e) { throw new IllegalArgumentException("The given URI is not valid " + e.getMessage()); } catch (UnknownHostException e) { throw new IllegalArgumentException("The given URI is not valid " + e.getMessage()); } OkHttpClient okHttpClient = new OkHttpClient(); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(url) .setErrorHandler(new HttpErrorHandler()) .setClient(new OkClient(okHttpClient)) .build(); return restAdapter.create(clazz); } public static class HttpErrorHandler implements ErrorHandler { @Override public Throwable handleError(final RetrofitError cause) { Response r = cause.getResponse(); if (r != null && r.getStatus() >= 400) { InputStreamReader reader = null; try { reader = new InputStreamReader(r.getBody().in(), Charsets.UTF_8); return new RuntimeException(CharStreams.toString(reader)); } catch (IOException e) { log.error(e, "http error!"); } finally { Closeables.closeQuietly(reader); } } return cause; } } }