@Override public Observable<HttpResponse> sendRequest(HttpRequest request) { try { HttpURLConnection connection = openConnection(request); prepareRequest(connection, request); return Observable.just(readResponse(connection)); } catch (IOException e) { return Observable.error(e); } }
/** * Constructs a new client. * * @param connectTimeoutMillis socket connection timeout in milliseconds * @param readTimeoutMillis socket read/write timeout in milliseconds */ public UrlConnectionHttpClient(int connectTimeoutMillis, int readTimeoutMillis) { this(connectTimeoutMillis, readTimeoutMillis, sslSocketFactory("TLS")); }
private HttpURLConnection openConnection(HttpRequest request) throws IOException { URL url = request.url().toURL(); URLConnection urlConnection = url.openConnection(); HttpURLConnection connection = "https".equals(url.getProtocol()) ? httpsURLConnection((HttpsURLConnection) urlConnection) : (HttpURLConnection) urlConnection; connection.setConnectTimeout(this.connectTimeoutMillis); connection.setReadTimeout(this.readTimeoutMillis); return connection; }
private HttpResponse readResponse(HttpURLConnection connection) throws IOException { int status = connection.getResponseCode(); HttpResponse.Builder response = response(HttpResponseStatus.valueOf(status)); try (InputStream stream = getInputStream(connection, status)) { byte[] content = toByteArray(stream); if (content.length > 0) { response.body(content); } connection.getHeaderFields().forEach((key, value) -> { if (!isNullOrEmpty(key)) { response.header(key, JOINER_ON_COMMA.join(value)); } }); } return response.build(); }
/** * Constructs a new client. * * @param connectTimeoutMillis socket connection timeout in milliseconds * @param readTimeoutMillis socket read/write timeout in milliseconds * @param protocol supported TLS protocol, TLSv1.1, TLSv1.2, etc. */ public UrlConnectionHttpClient(int connectTimeoutMillis, int readTimeoutMillis, String protocol) { this(connectTimeoutMillis, readTimeoutMillis, sslSocketFactory(protocol)); }