package org.lst.trading.lib.util; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; import rx.functions.Func1; import rx.schedulers.Schedulers; import java.io.IOException; import java.util.function.Consumer; public class Http { private static final Logger log = LoggerFactory.getLogger(Http.class); private static CloseableHttpClient client; public synchronized static HttpClient getDefaultHttpClient() { if (client == null) { client = HttpClients.createDefault(); } return client; } public static Observable<HttpResponse> get(String url, Consumer<HttpGet> configureRequest) { HttpGet request = new HttpGet(url); configureRequest.accept(request); return Observable.create(new OnSubscribe<HttpResponse>() { @Override public void call(Subscriber<? super HttpResponse> s) { try { log.debug("GET {}", url); s.onNext(getDefaultHttpClient().execute(request)); s.onCompleted(); } catch (IOException e) { s.onError(e); } } }).subscribeOn(Schedulers.io()); } public static Observable<HttpResponse> get(String url) { return get(url, x -> { }); } public static Func1<? super HttpResponse, ? extends Observable<String>> asString() { return t -> { try { return Observable.just(EntityUtils.toString(t.getEntity())); } catch (IOException e) { return Observable.error(e); } }; } }