# Class HttpsURLConnection

java.lang.Object
java.net.URLConnection
java.net.HttpURLConnection
javax.net.ssl.HttpsURLConnection

public abstract class HttpsURLConnection extends HttpURLConnection
`HttpsURLConnection` extends `HttpURLConnection` with support for https-specific features.

See http://www.w3.org/pub/WWW/Protocols/ and RFC 2818 for more details on the https specification.

This class uses `HostnameVerifier` and `SSLSocketFactory`. There are default implementations defined for both classes. However, the implementations can be replaced on a per-class (static) or per-instance basis. All new `HttpsURLConnection`s instances will be assigned the "default" static values at instance creation, but they can be overridden by calling the appropriate per-instance set method(s) before `connect`ing.

Since:
  1.4

## Field Summary

Fields
Modifier and Type
Field
Description
`protected HostnameVerifier`
`hostnameVerifier`
The `hostnameVerifier` for this object.

### Fields declared in class HttpURLConnection

`chunkLength, fixedContentLength, fixedContentLengthLong, HTTP_ACCEPTED, HTTP_BAD_GATEWAY, HTTP_BAD_METHOD, HTTP_BAD_REQUEST, HTTP_CLIENT_TIMEOUT, HTTP_CONFLICT, HTTP_CREATED, HTTP_ENTITY_TOO_LARGE, HTTP_FORBIDDEN, HTTP_GATEWAY_TIMEOUT, HTTP_GONE, HTTP_INTERNAL_ERROR, HTTP_LENGTH_REQUIRED, HTTP_MOVED_PERM, HTTP_MOVED_TEMP, HTTP_MULT_CHOICE, HTTP_NO_CONTENT, HTTP_NOT_ACCEPTABLE, HTTP_NOT_AUTHORITATIVE, HTTP_NOT_FOUND, HTTP_NOT_IMPLEMENTED, HTTP_NOT_MODIFIED, HTTP_OK, HTTP_PARTIAL, HTTP_PAYMENT_REQUIRED, HTTP_PRECON_FAILED, HTTP_PROXY_AUTH, HTTP_REQ_TOO_LONG, HTTP_RESET, HTTP_SEE_OTHER, HTTP_SERVER_ERROR, HTTP_UNAUTHORIZED, HTTP_UNAVAILABLE, HTTP_UNSUPPORTED_TYPE, HTTP_USE_PROXY, HTTP_VERSION, instanceFollowRedirects, method, responseCode, responseMessage`
Modifier and Type
Field
Description
`protected int`
`chunkLength`
The chunk-length when using chunked encoding streaming mode for output.
`protected int`
`fixedContentLength`
The fixed content-length when using fixed-length streaming mode.
`protected long`
`fixedContentLengthLong`
The fixed content-length when using fixed-length streaming mode.
`static final int`
`HTTP_ACCEPTED`
HTTP Status-Code 202: Accepted.
`static final int`
`HTTP_BAD_GATEWAY`
HTTP Status-Code 502: Bad Gateway.
`static final int`
`HTTP_BAD_METHOD`
HTTP Status-Code 405: Method Not Allowed.
`static final int`
`HTTP_BAD_REQUEST`
HTTP Status-Code 400: Bad Request.
`static final int`
`HTTP_CLIENT_TIMEOUT`
HTTP Status-Code 408: Request Time-Out.
`static final int`
`HTTP_CONFLICT`
HTTP Status-Code 409: Conflict.
`static final int`
`HTTP_CREATED`
HTTP Status-Code 201: Created.
`static final int`
`HTTP_ENTITY_TOO_LARGE`
HTTP Status-Code 413: Request Entity Too Large.
`static final int`
`HTTP_FORBIDDEN`
HTTP Status-Code 403: Forbidden.
`static final int`
`HTTP_GATEWAY_TIMEOUT`
HTTP Status-Code 504: Gateway Timeout.
`static final int`
`HTTP_GONE`
HTTP Status-Code 410: Gone.
`static final int`
`HTTP_INTERNAL_ERROR`
HTTP Status-Code 500: Internal Server Error.
`static final int`
`HTTP_LENGTH_REQUIRED`
HTTP Status-Code 411: Length Required.
`static final int`
`HTTP_MOVED_PERM`
HTTP Status-Code 301: Moved Permanently.
`static final int`
`HTTP_MOVED_TEMP`
HTTP Status-Code 302: Temporary Redirect.
`static final int`
`HTTP_MULT_CHOICE`
HTTP Status-Code 300: Multiple Choices.
`static final int`
`HTTP_NO_CONTENT`
HTTP Status-Code 204: No Content.
`static final int`
`HTTP_NOT_ACCEPTABLE`
HTTP Status-Code 406: Not Acceptable.
`static final int`
`HTTP_NOT_AUTHORITATIVE`
HTTP Status-Code 203: Non-Authoritative Information.
`static final int`
`HTTP_NOT_FOUND`
HTTP Status-Code 404: Not Found.
`static final int`
`HTTP_NOT_IMPLEMENTED`
HTTP Status-Code 501: Not Implemented.
`static final int`
`HTTP_NOT_MODIFIED`
HTTP Status-Code 304: Not Modified.
`static final int`
`HTTP_OK`
HTTP Status-Code 200: OK.
`static final int`
`HTTP_PARTIAL`
HTTP Status-Code 206: Partial Content.
`static final int`
`HTTP_PAYMENT_REQUIRED`
HTTP Status-Code 402: Payment Required.
`static final int`
`HTTP_PRECON_FAILED`
HTTP Status-Code 412: Precondition Failed.
`static final int`
`HTTP_PROXY_AUTH`
HTTP Status-Code 407: Proxy Authentication Required.
`static final int`
`HTTP_REQ_TOO_LONG`
HTTP Status-Code 414: Request-URI Too Large.
`static final int`
`HTTP_RESET`
HTTP Status-Code 205: Reset Content.
`static final int`
`HTTP_SEE_OTHER`
HTTP Status-Code 303: See Other.
`static final int`
`HTTP_SERVER_ERROR`
Deprecated.
it is misplaced and shouldn't have existed.
`static final int`
`HTTP_UNAUTHORIZED`
HTTP Status-Code 401: Unauthorized.
`static final int`
`HTTP_UNAVAILABLE`
HTTP Status-Code 503: Service Unavailable.
`static final int`
`HTTP_UNSUPPORTED_TYPE`
HTTP Status-Code 415: Unsupported Media Type.
`static final int`
`HTTP_USE_PROXY`
HTTP Status-Code 305: Use Proxy.
`static final int`
`HTTP_VERSION`
HTTP Status-Code 505: HTTP Version Not Supported.
`protected boolean`
`instanceFollowRedirects`
If `true`, the protocol will automatically follow redirects.
`protected String`
`method`
The HTTP method (GET,POST,PUT,etc.).
`protected int`
`responseCode`
An `int` representing the three digit HTTP Status-Code.
`protected String`
`responseMessage`
The HTTP response message.

### Fields declared in class URLConnection

`allowUserInteraction, connected, doInput, doOutput, ifModifiedSince, url, useCaches`
Modifier and Type
Field
Description
`protected boolean`
`allowUserInteraction`
If `true`, this `URL` is being examined in a context in which it makes sense to allow user interactions such as popping up an authentication dialog.
`protected boolean`
`connected`
If `false`, this connection object has not created a communications link to the specified URL.
`protected boolean`
`doInput`
This variable is set by the `setDoInput` method.
`protected boolean`
`doOutput`
This variable is set by the `setDoOutput` method.
`protected long`
`ifModifiedSince`
Some protocols support skipping the fetching of the object unless the object has been modified more recently than a certain time.
`protected URL`
`url`
The URL represents the remote object on the World Wide Web to which this connection is opened.
`protected boolean`
`useCaches`
If `true`, the protocol is allowed to use caching whenever it can.

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`HttpsURLConnection(URL url)`
Creates an `HttpsURLConnection` using the URL specified.

## Method Summary

Modifier and Type
Method
Description
`abstract String`
`getCipherSuite()`
Returns the cipher suite in use on this connection.
`static HostnameVerifier`
`getDefaultHostnameVerifier()`
Gets the default `HostnameVerifier` that is inherited by new instances of this class.
`static SSLSocketFactory`
`getDefaultSSLSocketFactory()`
Gets the default static `SSLSocketFactory` that is inherited by new instances of this class.
`HostnameVerifier`
`getHostnameVerifier()`
Gets the `HostnameVerifier` in place on this instance.
`abstract Certificate[]`
`getLocalCertificates()`
Returns the certificate(s) that were sent to the server during handshaking.
`Principal`
`getLocalPrincipal()`
Returns the principal that was sent to the server during handshaking.
`Principal`
`getPeerPrincipal()`
Returns the server's principal which was established as part of defining the session.
`abstract Certificate[]`
`getServerCertificates()`
Returns the server's certificate chain which was established as part of defining the session.
`Optional<SSLSession>`
`getSSLSession()`
Returns an `Optional` containing the `SSLSession` in use on this connection.
`SSLSocketFactory`
`getSSLSocketFactory()`
Gets the SSL socket factory to be used when creating sockets for secure https URL connections.
`static void`
`setDefaultHostnameVerifier(HostnameVerifier v)`
Sets the default `HostnameVerifier` inherited by a new instance of this class.
`static void`
`setDefaultSSLSocketFactory(SSLSocketFactory sf)`
Sets the default `SSLSocketFactory` inherited by new instances of this class.
`void`
`setHostnameVerifier(HostnameVerifier v)`
Sets the `HostnameVerifier` for this instance.
`void`
`setSSLSocketFactory(SSLSocketFactory sf)`
Sets the `SSLSocketFactory` to be used when this instance creates sockets for secure https URL connections.

### Methods declared in class HttpURLConnection

`disconnect, getErrorStream, getFollowRedirects, getHeaderField, getHeaderFieldKey, getInstanceFollowRedirects, getPermission, getRequestMethod, getResponseCode, getResponseMessage, setAuthenticator, setChunkedStreamingMode, setFixedLengthStreamingMode, setFixedLengthStreamingMode, setFollowRedirects, setInstanceFollowRedirects, setRequestMethod, usingProxy`
Modifier and Type
Method
Description
`abstract void`
`disconnect()`
Indicates that other requests to the server are unlikely in the near future.
`InputStream`
`getErrorStream()`
Returns the error stream if the connection failed but the server sent useful data nonetheless.
`static boolean`
`getFollowRedirects()`
Returns a `boolean` indicating whether or not HTTP redirects (3xx) should be automatically followed.
`String`
`getHeaderField(int n)`
Returns the value for the `n`th header field.
`String`
`getHeaderFieldKey(int n)`
Returns the key for the `n`th header field.
`boolean`
`getInstanceFollowRedirects()`
Returns the value of this `HttpURLConnection`'s `instanceFollowRedirects` field.
`Permission`
`getPermission()`
Deprecated, for removal: This API element is subject to removal in a future version.
Permissions can no longer be used for controlling access to resources as the Security Manager is no longer supported.
`String`
`getRequestMethod()`
Get the request method.
`int`
`getResponseCode()`
Gets the status code from an HTTP response message.
`String`
`getResponseMessage()`
Gets the HTTP response message, if any, returned along with the response code from a server.
`void`
`setAuthenticator(Authenticator auth)`
Supplies an `Authenticator` to be used when authentication is requested through the HTTP protocol for this `HttpURLConnection`.
`void`
`setChunkedStreamingMode(int chunklen)`
This method is used to enable streaming of a HTTP request body without internal buffering, when the content length is not known in advance.
`void`
`setFixedLengthStreamingMode(int contentLength)`
This method is used to enable streaming of a HTTP request body without internal buffering, when the content length is known in advance.
`void`
`setFixedLengthStreamingMode(long contentLength)`
This method is used to enable streaming of a HTTP request body without internal buffering, when the content length is known in advance.
`static void`
`setFollowRedirects(boolean set)`
Sets whether HTTP redirects (requests with response code 3xx) should be automatically followed by this class.
`void`
`setInstanceFollowRedirects(boolean followRedirects)`
Sets whether HTTP redirects (requests with response code 3xx) should be automatically followed by this `HttpURLConnection` instance.
`void`
`setRequestMethod(String method)`
Set the method for the URL request, one of: GET POST HEAD OPTIONS PUT DELETE TRACE are legal, subject to protocol restrictions.
`abstract boolean`
`usingProxy()`
Indicates if the connection is going through a proxy.

### Methods declared in class URLConnection

`addRequestProperty, connect, getAllowUserInteraction, getConnectTimeout, getContent, getContent, getContentEncoding, getContentLength, getContentLengthLong, getContentType, getDate, getDefaultAllowUserInteraction, getDefaultRequestProperty, getDefaultUseCaches, getDefaultUseCaches, getDoInput, getDoOutput, getExpiration, getFileNameMap, getHeaderField, getHeaderFieldDate, getHeaderFieldInt, getHeaderFieldLong, getHeaderFields, getIfModifiedSince, getInputStream, getLastModified, getOutputStream, getReadTimeout, getRequestProperties, getRequestProperty, getURL, getUseCaches, guessContentTypeFromName, guessContentTypeFromStream, setAllowUserInteraction, setConnectTimeout, setContentHandlerFactory, setDefaultAllowUserInteraction, setDefaultRequestProperty, setDefaultUseCaches, setDefaultUseCaches, setDoInput, setDoOutput, setFileNameMap, setIfModifiedSince, setReadTimeout, setRequestProperty, setUseCaches, toString`
Modifier and Type
Method
Description
`void`
`addRequestProperty(String key, String value)`
Adds a general request property specified by a key-value pair.
`abstract void`
`connect()`
Opens a communications link to the resource referenced by this URL, if such a connection has not already been established.
`boolean`
`getAllowUserInteraction()`
Returns the value of the `allowUserInteraction` field for this object.
`int`
`getConnectTimeout()`
Returns setting for connect timeout.
`Object`
`getContent()`
Retrieves the contents of this URL connection.
`Object`
`getContent(Class<?>[] classes)`
Retrieves the contents of this URL connection.
`String`
`getContentEncoding()`
Returns the value of the `content-encoding` header field.
`int`
`getContentLength()`
Returns the value of the `content-length` header field.
`long`
`getContentLengthLong()`
Returns the value of the `content-length` header field as a long.
`String`
`getContentType()`
Returns the value of the `content-type` header field.
`long`
`getDate()`
Returns the value of the `date` header field.
`static boolean`
`getDefaultAllowUserInteraction()`
Returns the default value of the `allowUserInteraction` field.
`static String`
`getDefaultRequestProperty(String key)`
Deprecated.
The instance specific getRequestProperty method should be used after an appropriate instance of URLConnection is obtained.
`boolean`
`getDefaultUseCaches()`
Returns the default value of a `URLConnection`'s `useCaches` flag.
`static boolean`
`getDefaultUseCaches(String protocol)`
Returns the default value of the `useCaches` flag for the given protocol.
`boolean`
`getDoInput()`
Returns the value of this `URLConnection`'s `doInput` flag.
`boolean`
`getDoOutput()`
Returns the value of this `URLConnection`'s `doOutput` flag.
`long`
`getExpiration()`
Returns the value of the `expires` header field.
`static FileNameMap`
`getFileNameMap()`
Loads filename map (a mimetable) from a data file.
`String`
`getHeaderField(String name)`
Returns the value of the named header field.
`long`
`getHeaderFieldDate(String name, long defaultValue)`
Returns the value of the named field parsed as date.
`int`
`getHeaderFieldInt(String name, int defaultValue)`
Returns the value of the named field parsed as a number.
`long`
`getHeaderFieldLong(String name, long defaultValue)`
Returns the value of the named field parsed as a number.
`Map<String, List<String>>`
`getHeaderFields()`
Returns an unmodifiable Map of the header fields.
`long`
`getIfModifiedSince()`
Returns the value of this object's `ifModifiedSince` field.
`InputStream`
`getInputStream()`
Returns an input stream that reads from this open connection.
`long`
`getLastModified()`
Returns the value of the `last-modified` header field.
`OutputStream`
`getOutputStream()`
Returns an output stream that writes to this connection.
`int`
`getReadTimeout()`
Returns setting for read timeout. 0 return implies that the option is disabled (i.e., timeout of infinity).
`Map<String, List<String>>`
`getRequestProperties()`
Returns an unmodifiable Map of general request properties for this connection.
`String`
`getRequestProperty(String key)`
Returns the value of the named general request property for this connection.
`URL`
`getURL()`
Returns the value of this `URLConnection`'s `URL` field.
`boolean`
`getUseCaches()`
Returns the value of this `URLConnection`'s `useCaches` field.
`static String`
`guessContentTypeFromName(String fname)`
Tries to determine the content type of an object, based on the specified "file" component of a URL.
`static String`
`guessContentTypeFromStream(InputStream is)`
Tries to determine the type of an input stream based on the characters at the beginning of the input stream.
`void`
`setAllowUserInteraction(boolean allowuserinteraction)`
Set the value of the `allowUserInteraction` field of this `URLConnection`.
`void`
`setConnectTimeout(int timeout)`
Sets a specified timeout value, in milliseconds, to be used when opening a communications link to the resource referenced by this URLConnection.
`static void`
`setContentHandlerFactory(ContentHandlerFactory fac)`
Sets the `ContentHandlerFactory` of an application.
`static void`
`setDefaultAllowUserInteraction(boolean defaultallowuserinteraction)`
Sets the default value of the `allowUserInteraction` field for all future `URLConnection` objects to the specified value.
`static void`
`setDefaultRequestProperty(String key, String value)`
Deprecated.
The instance specific setRequestProperty method should be used after an appropriate instance of URLConnection is obtained.
`void`
`setDefaultUseCaches(boolean defaultusecaches)`
Sets the default value of the `useCaches` field to the specified value.
`static void`
`setDefaultUseCaches(String protocol, boolean defaultVal)`
Sets the default value of the `useCaches` field for the named protocol to the given value.
`void`
`setDoInput(boolean doinput)`
Sets the value of the `doInput` field for this `URLConnection` to the specified value.
`void`
`setDoOutput(boolean dooutput)`
Sets the value of the `doOutput` field for this `URLConnection` to the specified value.
`static void`
`setFileNameMap(FileNameMap map)`
Sets the FileNameMap.
`void`
`setIfModifiedSince(long ifmodifiedsince)`
Sets the value of the `ifModifiedSince` field of this `URLConnection` to the specified value.
`void`
`setReadTimeout(int timeout)`
Sets the read timeout to a specified timeout, in milliseconds.
`void`
`setRequestProperty(String key, String value)`
Sets the general request property.
`void`
`setUseCaches(boolean usecaches)`
Sets the value of the `useCaches` field of this `URLConnection` to the specified value.
`String`
`toString()`
Returns a `String` representation of this URL connection.

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
Modifier and Type
Method
Description
`protected Object`
`clone()`
Creates and returns a copy of this object.
`boolean`
`equals(Object obj)`
Indicates whether some other object is "equal to" this one.
`protected void`
`finalize()`
Deprecated, for removal: This API element is subject to removal in a future version.
Finalization is deprecated and subject to removal in a future release.
`final Class<?>`
`getClass()`
Returns the runtime class of this `Object`.
`int`
`hashCode()`
Returns a hash code value for this object.
`final void`
`notify()`
Wakes up a single thread that is waiting on this object's monitor.
`final void`
`notifyAll()`
Wakes up all threads that are waiting on this object's monitor.
`final void`
`wait()`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
`final void`
`wait(long timeoutMillis)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
`final void`
`wait(long timeoutMillis, int nanos)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

## Field Details

### hostnameVerifier

protected HostnameVerifier hostnameVerifier
The `hostnameVerifier` for this object.

## Constructor Details

### HttpsURLConnection

protected HttpsURLConnection(URL url)
Creates an `HttpsURLConnection` using the URL specified.

Parameters:
  `url` - the URL

## Method Details

### getCipherSuite

public abstract String getCipherSuite()
Returns the cipher suite in use on this connection.

Returns:
  the cipher suite
Throws:
  `IllegalStateException` - if this method is called before the connection has been established.

### getLocalCertificates

public abstract Certificate[] getLocalCertificates()
Returns the certificate(s) that were sent to the server during handshaking.

Note: This method is useful only when using certificate-based cipher suites.

When multiple certificates are available for use in a handshake, the implementation chooses what it considers the "best" certificate chain available, and transmits that to the other side. This method allows the caller to know which certificate chain was actually sent.

Returns:
  an ordered array of certificates, with the client's own certificate first followed by any certificate authorities. If no certificates were sent, then null is returned.
Throws:
  `IllegalStateException` - if this method is called before the connection has been established.
See Also:
  - `getLocalPrincipal()`

### getServerCertificates

public abstract Certificate[] getServerCertificates() throws SSLPeerUnverifiedException
Returns the server's certificate chain which was established as part of defining the session.

Note: This method can be used only when using certificate-based cipher suites; using it with non-certificate-based cipher suites, such as Kerberos, will throw an SSLPeerUnverifiedException.

Note: The returned value may not be a valid certificate chain and should not be relied on for trust decisions.

Returns:
  an ordered array of server certificates, with the peer's own certificate first followed by any certificate authorities.
Throws:
  `SSLPeerUnverifiedException` - if the peer is not verified.
  `IllegalStateException` - if this method is called before the connection has been established.
See Also:
  - `getPeerPrincipal()`

### getPeerPrincipal

public Principal getPeerPrincipal() throws SSLPeerUnverifiedException
Returns the server's principal which was established as part of defining the session.

Note: Subclasses should override this method. If not overridden, it will default to returning the X500Principal of the server's end-entity certificate for certificate-based ciphersuites, or throw an SSLPeerUnverifiedException for non-certificate based ciphersuites, such as Kerberos.

Returns:
  the server's principal. Returns an X500Principal of the end-entity certificate for X509-based cipher suites, and KerberosPrincipal for Kerberos cipher suites.
Throws:
  `SSLPeerUnverifiedException` - if the peer was not verified
  `IllegalStateException` - if this method is called before the connection has been established.
Since:
  1.5
See Also:
  - `getServerCertificates()`
  - `getLocalPrincipal()`

### getLocalPrincipal

public Principal getLocalPrincipal()
Returns the principal that was sent to the server during handshaking.

Note: Subclasses should override this method. If not overridden, it will default to returning the X500Principal of the end-entity certificate that was sent to the server for certificate-based ciphersuites or, return null for non-certificate based ciphersuites, such as Kerberos.

Returns:
  the principal sent to the server. Returns an X500Principal of the end-entity certificate for X509-based cipher suites, and KerberosPrincipal for Kerberos cipher suites. If no principal was sent, then null is returned.
Throws:
  `IllegalStateException` - if this method is called before the connection has been established.
Since:
  1.5
See Also:
  - `getLocalCertificates()`
  - `getPeerPrincipal()`

### setDefaultHostnameVerifier

public static void setDefaultHostnameVerifier(HostnameVerifier v)
Sets the default `HostnameVerifier` inherited by a new instance of this class.

If this method is not called, the default `HostnameVerifier` assumes the connection should not be permitted.

Parameters:
  `v` - the default host name verifier
Throws:
  `IllegalArgumentException` - if the `HostnameVerifier` parameter is null.
See Also:
  - `getDefaultHostnameVerifier()`

### getDefaultHostnameVerifier

public static HostnameVerifier getDefaultHostnameVerifier()
Gets the default `HostnameVerifier` that is inherited by new instances of this class.

Returns:
  the default host name verifier
See Also:
  - `setDefaultHostnameVerifier(HostnameVerifier)`

### setHostnameVerifier

public void setHostnameVerifier(HostnameVerifier v)
Sets the `HostnameVerifier` for this instance.

New instances of this class inherit the default static hostname verifier set by `setDefaultHostnameVerifier`. Calls to this method replace this object's `HostnameVerifier`.

Parameters:
  `v` - the host name verifier
Throws:
  `IllegalArgumentException` - if the `HostnameVerifier` parameter is null.
See Also:
  - `getHostnameVerifier()`
  - `setDefaultHostnameVerifier(HostnameVerifier)`

### getHostnameVerifier

public HostnameVerifier getHostnameVerifier()
Gets the `HostnameVerifier` in place on this instance.

Returns:
  the host name verifier
See Also:
  - `setHostnameVerifier(HostnameVerifier)`
  - `setDefaultHostnameVerifier(HostnameVerifier)`

### setDefaultSSLSocketFactory

public static void setDefaultSSLSocketFactory(SSLSocketFactory sf)
Sets the default `SSLSocketFactory` inherited by new instances of this class.

The socket factories are used when creating sockets for secure https URL connections.

Parameters:
  `sf` - the default SSL socket factory
Throws:
  `IllegalArgumentException` - if the SSLSocketFactory parameter is null.
See Also:
  - `getDefaultSSLSocketFactory()`

### getDefaultSSLSocketFactory

public static SSLSocketFactory getDefaultSSLSocketFactory()
Gets the default static `SSLSocketFactory` that is inherited by new instances of this class.

The socket factories are used when creating sockets for secure https URL connections.

Returns:
  the default `SSLSocketFactory`
See Also:
  - `setDefaultSSLSocketFactory(SSLSocketFactory)`

### setSSLSocketFactory

public void setSSLSocketFactory(SSLSocketFactory sf)
Sets the `SSLSocketFactory` to be used when this instance creates sockets for secure https URL connections.

New instances of this class inherit the default static `SSLSocketFactory` set by `setDefaultSSLSocketFactory`. Calls to this method replace this object's `SSLSocketFactory`.

Parameters:
  `sf` - the SSL socket factory
Throws:
  `IllegalArgumentException` - if the `SSLSocketFactory` parameter is null.
See Also:
  - `getSSLSocketFactory()`

### getSSLSocketFactory

public SSLSocketFactory getSSLSocketFactory()
Gets the SSL socket factory to be used when creating sockets for secure https URL connections.

Returns:
  the `SSLSocketFactory`
See Also:
  - `setSSLSocketFactory(SSLSocketFactory)`

### getSSLSession

public Optional<SSLSession> getSSLSession()
Returns an `Optional` containing the `SSLSession` in use on this connection. Returns an empty `Optional` if the underlying implementation does not support this method.

Implementation Requirements:
  For compatibility, the default implementation of this method returns an empty `Optional`. Subclasses should override this method with an appropriate implementation since an application may need to access additional parameters associated with the SSL session.
Returns:
  an `Optional` containing the `SSLSession` in use on this connection.
Throws:
  `IllegalStateException` - if this method is called before the connection has been established
Since:
  12
See Also:
  - `SSLSession`