mirror of
https://github.com/square/okhttp.git
synced 2026-01-27 04:22:07 +03:00
The previous structure had hierarchy that was useful for libcore but overkill for OkHttp.
157 lines
5.8 KiB
Java
157 lines
5.8 KiB
Java
/*
|
|
* Copyright (C) 2012 Square, Inc.
|
|
*
|
|
* Licensed 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 com.squareup.okhttp;
|
|
|
|
import com.squareup.okhttp.internal.http.HttpURLConnectionImpl;
|
|
import com.squareup.okhttp.internal.http.HttpsURLConnectionImpl;
|
|
import java.net.CookieHandler;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.Proxy;
|
|
import java.net.ProxySelector;
|
|
import java.net.ResponseCache;
|
|
import java.net.URL;
|
|
import javax.net.ssl.HostnameVerifier;
|
|
import javax.net.ssl.HttpsURLConnection;
|
|
import javax.net.ssl.SSLSocketFactory;
|
|
|
|
/**
|
|
* Configures and creates HTTP connections.
|
|
*/
|
|
public final class OkHttpClient {
|
|
private Proxy proxy;
|
|
private ProxySelector proxySelector;
|
|
private CookieHandler cookieHandler;
|
|
private ResponseCache responseCache;
|
|
private SSLSocketFactory sslSocketFactory;
|
|
private HostnameVerifier hostnameVerifier;
|
|
private ConnectionPool connectionPool;
|
|
|
|
/**
|
|
* Sets the HTTP proxy that will be used by connections created by this
|
|
* client. This takes precedence over {@link #setProxySelector}, which is
|
|
* only honored when this proxy is null (which it is by default). To disable
|
|
* proxy use completely, call {@code setProxy(Proxy.NO_PROXY)}.
|
|
*/
|
|
public OkHttpClient setProxy(Proxy proxy) {
|
|
this.proxy = proxy;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the proxy selection policy to be used if no {@link #setProxy proxy}
|
|
* is specified explicitly. The proxy selector may return multiple proxies;
|
|
* in that case they will be tried in sequence until a successful connection
|
|
* is established.
|
|
*
|
|
* <p>If unset, the {@link ProxySelector#getDefault() system-wide default}
|
|
* proxy selector will be used.
|
|
*/
|
|
public OkHttpClient setProxySelector(ProxySelector proxySelector) {
|
|
this.proxySelector = proxySelector;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the cookie handler to be used to read outgoing cookies and write
|
|
* incoming cookies.
|
|
*
|
|
* <p>If unset, the {@link CookieHandler#getDefault() system-wide default}
|
|
* cookie handler will be used.
|
|
*/
|
|
public OkHttpClient setCookieHandler(CookieHandler cookieHandler) {
|
|
this.cookieHandler = cookieHandler;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the response cache to be used to read and write cached responses.
|
|
*
|
|
* <p>If unset, the {@link ResponseCache#getDefault() system-wide default}
|
|
* response cache will be used.
|
|
*/
|
|
public OkHttpClient setResponseCache(ResponseCache responseCache) {
|
|
this.responseCache = responseCache;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the socket factory used to secure HTTPS connections.
|
|
*
|
|
* <p>If unset, the {@link HttpsURLConnection#getDefaultSSLSocketFactory()
|
|
* system-wide default} SSL socket factory will be used.
|
|
*/
|
|
public OkHttpClient setSSLSocketFactory(SSLSocketFactory sslSocketFactory) {
|
|
this.sslSocketFactory = sslSocketFactory;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the verifier used to confirm that response certificates apply to
|
|
* requested hostnames for HTTPS connections.
|
|
*
|
|
* <p>If unset, the {@link HttpsURLConnection#getDefaultHostnameVerifier()
|
|
* system-wide default} hostname verifier will be used.
|
|
*/
|
|
public OkHttpClient setHostnameVerifier(HostnameVerifier hostnameVerifier) {
|
|
this.hostnameVerifier = hostnameVerifier;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the connection pool used to recycle HTTP and HTTPS connections.
|
|
*
|
|
* <p>If unset, the {@link ConnectionPool#getDefault() system-wide
|
|
* default} connection pool will be used.
|
|
*/
|
|
public OkHttpClient setConnectionPool(ConnectionPool connectionPool) {
|
|
this.connectionPool = connectionPool;
|
|
return this;
|
|
}
|
|
|
|
public HttpURLConnection open(URL url) {
|
|
ProxySelector proxySelector = this.proxySelector != null
|
|
? this.proxySelector
|
|
: ProxySelector.getDefault();
|
|
CookieHandler cookieHandler = this.cookieHandler != null
|
|
? this.cookieHandler
|
|
: CookieHandler.getDefault();
|
|
ResponseCache responseCache = this.responseCache != null
|
|
? this.responseCache
|
|
: ResponseCache.getDefault();
|
|
ConnectionPool connectionPool = this.connectionPool != null
|
|
? this.connectionPool
|
|
: ConnectionPool.getDefault();
|
|
|
|
String protocol = url.getProtocol();
|
|
if (protocol.equals("http")) {
|
|
return new HttpURLConnectionImpl(
|
|
url, 80, proxy, proxySelector, cookieHandler, responseCache, connectionPool);
|
|
} else if (protocol.equals("https")) {
|
|
HttpsURLConnectionImpl result = new HttpsURLConnectionImpl(
|
|
url, 443, proxy, proxySelector, cookieHandler, responseCache, connectionPool);
|
|
result.setSSLSocketFactory(this.sslSocketFactory != null
|
|
? this.sslSocketFactory
|
|
: HttpsURLConnection.getDefaultSSLSocketFactory());
|
|
result.setHostnameVerifier(this.hostnameVerifier != null
|
|
? this.hostnameVerifier
|
|
: HttpsURLConnection.getDefaultHostnameVerifier());
|
|
return result;
|
|
} else {
|
|
throw new IllegalArgumentException("Unexpected protocol: " + protocol);
|
|
}
|
|
}
|
|
}
|