Package org.htmlunit

# Class WebClient

java.lang.Object
org.htmlunit.WebClient

All Implemented Interfaces:
  `Serializable`, `AutoCloseable`

public class WebClient extends Object implements Serializable, AutoCloseable
The main starting point in HtmlUnit: this class simulates a web browser.

A standard usage of HtmlUnit will start with using the `getPage(String)` method (or `getPage(URL)`) to load a first `Page` and will continue with further processing on this page depending on its type.

Example:
`final WebClient webClient = new WebClient();
final `HtmlPage` startPage = webClient.getPage("http://htmlunit.sf.net");
assertEquals("HtmlUnit - Welcome to HtmlUnit", startPage.`getTitleText`());`

Note: a `WebClient` instance is not thread safe. It is intended to be used from a single thread.

See Also:
  - Serialized Form

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `WebClient.PooledCSS3Parser`
  This is a poolable CSS3Parser which can be reused automatically when closed.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `TARGET_BLANK`
  target "_blank".
  `static final String`
  `TARGET_SELF`
  target "_self".

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `WebClient()`
  Creates a web client instance using the browser version returned by `BrowserVersion.getDefault()`.
  `WebClient(BrowserVersion browserVersion)`
  Creates a web client instance using the specified `BrowserVersion`.
  `WebClient(BrowserVersion browserVersion, boolean javaScriptEngineEnabled, String proxyHost, int proxyPort)`
  Creates an instance that will use the specified `BrowserVersion` and proxy server.
  `WebClient(BrowserVersion browserVersion, boolean javaScriptEngineEnabled, String proxyHost, int proxyPort, String proxyScheme)`
  Creates an instance that will use the specified `BrowserVersion` and proxy server.
  `WebClient(BrowserVersion browserVersion, String proxyHost, int proxyPort)`
  Creates an instance that will use the specified `BrowserVersion` and proxy server.
  `WebClient(BrowserVersion browserVersion, String proxyHost, int proxyPort, String proxyScheme)`
  Creates an instance that will use the specified `BrowserVersion` and proxy server.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addCookie(String cookieString, URL pageUrl, Object origin)`
  Parses the given cookie and adds this to our cookie store.
  `void`
  `addRequestHeader(String name, String value)`
  Adds a header which will be sent with EVERY request from this client.
  `void`
  `addWebWindowListener(WebWindowListener listener)`
  Adds a listener for `WebWindowEvent`s.
  `void`
  `close()`
  Closes all opened windows, stopping all background JavaScript processing.
  `boolean`
  `containsWebWindow(WebWindow webWindow)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Returns true if the list of WebWindows contains the provided one.
  `void`
  `deregisterWebWindow(WebWindow webWindow)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Removes a window from the list of available windows.
  `void`
  `download(WebWindow requestingWindow, String target, WebRequest request, boolean checkHash, boolean forceLoad, String forceAttachmentWithFilename, String description)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Perform the downloads and stores it for loading later into a window.
  `static URL`
  `expandUrl(URL baseUrl, String relativeUrl)`
  Expands a relative URL relative to the specified base.
  `AjaxController`
  `getAjaxController()`
  Gets the current AJAX controller.
  `AlertHandler`
  `getAlertHandler()`
  Returns the alert handler for this webclient.
  `AttachmentHandler`
  `getAttachmentHandler()`
  Returns the current attachment handler.
  `BrowserVersion`
  `getBrowserVersion()`
  Returns the current browser version.
  `Cache`
  `getCache()`
  Gets the cache currently being used.
  `ClipboardHandler`
  `getClipboardHandler()`
  Returns the current clipboard handler.
  `ConfirmHandler`
  `getConfirmHandler()`
  Returns the confirm handler.
  `CookieManager`
  `getCookieManager()`
  Returns the cookie manager used by this web client.
  `Set<Cookie>`
  `getCookies(URL url)`
  Returns the currently configured cookies applicable to the specified URL, in an unmodifiable set.
  `org.apache.http.client.CredentialsProvider`
  `getCredentialsProvider()`
  Returns the credentials provider for this client instance.
  `WebClient.PooledCSS3Parser`
  `getCSS3Parser()`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  `org.htmlunit.cssparser.parser.CSSErrorHandler`
  `getCssErrorHandler()`
  Returns the CSS error handler used by this web client when CSS problems are encountered.
  `WebWindow`
  `getCurrentWindow()`
  Returns the "current" window for this client.
  `Executor`
  `getExecutor()`
  Returns the executor for this `WebClient`.
  `FrameContentHandler`
  `getFrameContentHandler()`
  Returns the current FrameContent handler.
  `org.htmlunit.html.parser.HTMLParserListener`
  `getHTMLParserListener()`
  Gets the configured listener for messages generated by the HTML parser.
  `IncorrectnessListener`
  `getIncorrectnessListener()`
  Gets the current listener for encountered incorrectness (except HTML parsing messages that are handled by the HTML parser listener).
  `org.htmlunit.javascript.AbstractJavaScriptEngine<?>`
  `getJavaScriptEngine()`
  This method is intended for testing only - use at your own risk.
  `org.htmlunit.javascript.JavaScriptErrorListener`
  `getJavaScriptErrorListener()`
  Returns the javascript error listener for this `WebClient`.
  `long`
  `getJavaScriptTimeout()`
  Returns the number of milliseconds that a script is allowed to execute before being terminated.
  `OnbeforeunloadHandler`
  `getOnbeforeunloadHandler()`
  Returns the onbeforeunload handler for this `WebClient`.
  `WebClientOptions`
  `getOptions()`
  Returns the options object of this WebClient.
  `<P extends Page>
  P`
  `getPage(String url)`
  Convenient method to build a URL and load it into the current WebWindow as it would be done by `getPage(WebWindow, WebRequest)`.
  `<P extends Page>
  P`
  `getPage(URL url)`
  Convenient method to load a URL into the current top WebWindow as it would be done by `getPage(WebWindow, WebRequest)`.
  `<P extends Page>
  P`
  `getPage(WebRequest request)`
  Convenient method to load a web request into the current top WebWindow.
  `<P extends Page>
  P`
  `getPage(WebWindow webWindow, WebRequest webRequest)`
  Send a request to a server and return a Page that represents the response from the server.
  `PageCreator`
  `getPageCreator()`
  Returns the current page creator.
  `PrintHandler`
  `getPrintHandler()`
  Returns the current `PrintHandler`.
  `PromptHandler`
  `getPromptHandler()`
  Returns the prompt handler.
  `RefreshHandler`
  `getRefreshHandler()`
  Returns the current refresh handler.
  `ScriptPreProcessor`
  `getScriptPreProcessor()`
  Returns the script pre processor for this `WebClient`.
  `StatusHandler`
  `getStatusHandler()`
  Returns the status handler for this `WebClient`.
  `StorageHolder`
  `getStorageHolder()`
  Gets the holder for the different storages.
  `List<TopLevelWindow>`
  `getTopLevelWindows()`
  Returns an immutable list of open top level windows.
  `WebConnection`
  `getWebConnection()`
  Returns the object that will resolve all URL requests.
  `WebConsole`
  `getWebConsole()`
  Returns the WebConsole.
  `org.htmlunit.webstart.WebStartHandler`
  `getWebStartHandler()`
  Returns the current WebStart handler.
  `WebWindow`
  `getWebWindowByName(String name)`
  Returns the first `WebWindow` that matches the specified name.
  `List<WebWindow>`
  `getWebWindows()`
  Returns an immutable list of open web windows (whether they are top level windows or not).
  `String`
  `guessContentType(File file)`
  Tries to guess the content type of the file.
  This utility could be located in a helper class but we can compare this functionality for instance with the "Helper Applications" settings of Mozilla and therefore see it as a property of the "browser".
  `void`
  `initialize(WebWindow webWindow, Page page)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Initializes a new web window for JavaScript.
  `void`
  `initializeEmptyWindow(WebWindow webWindow, Page page)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Initializes a new empty window for JavaScript.
  `boolean`
  `isJavaScriptEnabled()`
  Returns true if the javaScript support is enabled.
  `boolean`
  `isJavaScriptEngineEnabled()`
  Returns true if the javaScript engine is enabled.
  `boolean`
  `isLoadStaticContent()`
  Deprecated.
  `void`
  `loadDownloadedResponses()`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Loads downloaded responses into the corresponding windows.
  `HtmlPage`
  `loadHtmlCodeIntoCurrentWindow(String htmlCode)`
  Parses the given XHtml code string and loads the resulting XHtmlPage into the current window.
  `WebResponse`
  `loadWebResponse(WebRequest webRequest)`
  Loads a `WebResponse` from the server.
  `Page`
  `loadWebResponseInto(WebResponse webResponse, WebWindow webWindow)`
  Creates a page based on the specified response and inserts it into the specified window.
  `Page`
  `loadWebResponseInto(WebResponse webResponse, WebWindow webWindow, String forceAttachmentWithFilename)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  `XHtmlPage`
  `loadXHtmlCodeIntoCurrentWindow(String xhtmlCode)`
  Parses the given XHtml code string and loads the resulting XHtmlPage into the current window.
  `DialogWindow`
  `openDialogWindow(URL url, WebWindow opener, Object dialogArguments)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  `WebWindow`
  `openTargetWindow(WebWindow opener, String windowName, String defaultName)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Open the window with the specified name.
  `WebWindow`
  `openWindow(URL url, String windowName)`
  Open a new window with the specified name.
  `WebWindow`
  `openWindow(URL url, String windowName, WebWindow opener)`
  Open a new window with the specified name.
  `void`
  `printContentIfNecessary(WebResponse webResponse)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  `void`
  `registerWebWindow(WebWindow webWindow)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  Adds a new window to the list of available windows.
  `void`
  `removeRequestHeader(String name)`
  Removes a header from being sent with EVERY request from this client.
  `void`
  `removeWebWindowListener(WebWindowListener listener)`
  Removes a listener for `WebWindowEvent`s.
  `void`
  `reset()`
  Experimental API: May be changed in next release and may not yet work perfectly!
  `void`
  `setAjaxController(AjaxController newValue)`
  Sets the current AJAX controller.
  `void`
  `setAlertHandler(AlertHandler alertHandler)`
  Sets the alert handler for this webclient.
  `void`
  `setAttachmentHandler(AttachmentHandler handler)`
  Sets the attachment handler.
  `void`
  `setCache(Cache cache)`
  Sets the cache to use.
  `void`
  `setClipboardHandler(ClipboardHandler handler)`
  Sets the clipboard handler.
  `void`
  `setConfirmHandler(ConfirmHandler handler)`
  Sets the handler that will be executed when the JavaScript method Window.confirm() is called.
  `void`
  `setCookieManager(CookieManager cookieManager)`
  Sets the cookie manager used by this web client.
  `void`
  `setCredentialsProvider(org.apache.http.client.CredentialsProvider credentialsProvider)`
  Sets the credentials provider that will provide authentication information when trying to access protected information on a web server.
  `void`
  `setCssErrorHandler(org.htmlunit.cssparser.parser.CSSErrorHandler cssErrorHandler)`
  Sets the CSS error handler used by this web client when CSS problems are encountered.
  `void`
  `setCurrentWindow(WebWindow window)`
  Sets the "current" window for this client.
  `void`
  `setExecutor(ExecutorService executor)`
  Changes the ExecutorService for this `WebClient`.
  `void`
  `setFrameContentHandler(FrameContentHandler handler)`
  Sets the FrameContent handler.
  `void`
  `setHTMLParserListener(org.htmlunit.html.parser.HTMLParserListener listener)`
  Sets the listener for messages generated by the HTML parser.
  `void`
  `setIncorrectnessListener(IncorrectnessListener listener)`
  Returns the current HTML incorrectness listener.
  `void`
  `setJavaScriptEngine(org.htmlunit.javascript.AbstractJavaScriptEngine<?> engine)`
  This method is intended for testing only - use at your own risk.
  `void`
  `setJavaScriptErrorListener(org.htmlunit.javascript.JavaScriptErrorListener javaScriptErrorListener)`
  Sets the javascript error listener for this `WebClient`.
  `void`
  `setJavaScriptTimeout(long timeout)`
  Sets the number of milliseconds that a script is allowed to execute before being terminated.
  `void`
  `setOnbeforeunloadHandler(OnbeforeunloadHandler onbeforeunloadHandler)`
  Sets the onbeforeunload handler for this `WebClient`.
  `void`
  `setPageCreator(PageCreator pageCreator)`
  Sets the object that will be used to create pages.
  `void`
  `setPrintHandler(PrintHandler handler)`
  Sets the `PrintHandler` to be used if Windoe.print() is called (Printing Spec).
  `void`
  `setPromptHandler(PromptHandler handler)`
  Sets the handler that will be executed when the JavaScript method Window.prompt() is called.
  `void`
  `setRefreshHandler(RefreshHandler handler)`
  Sets the handler to be used whenever a refresh is triggered.
  `void`
  `setScriptPreProcessor(ScriptPreProcessor scriptPreProcessor)`
  Sets the script pre processor for this `WebClient`.
  `void`
  `setStatusHandler(StatusHandler statusHandler)`
  Sets the status handler for this webclient.
  `void`
  `setWebConnection(WebConnection webConnection)`
  Sets the object that will resolve all URL requests.
  `void`
  `setWebStartHandler(org.htmlunit.webstart.WebStartHandler handler)`
  Sets the WebStart handler.
  `void`
  `throwFailingHttpStatusCodeExceptionIfNecessary(WebResponse webResponse)`
  INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
  `int`
  `waitForBackgroundJavaScript(long timeoutMillis)`
  Experimental API: May be changed in next release and may not yet work perfectly!
  `int`
  `waitForBackgroundJavaScriptStartingBefore(long delayMillis)`
  Experimental API: May be changed in next release and may not yet work perfectly!

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### TARGET_BLANK

    public static final String TARGET_BLANK
    target "_blank".
    See Also:
      - Constant Field Values

  - ### TARGET_SELF

    public static final String TARGET_SELF
    target "_self".
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### WebClient

    public WebClient()
    Creates a web client instance using the browser version returned by `BrowserVersion.getDefault()`.

  - ### WebClient

    public WebClient(BrowserVersion browserVersion)
    Creates a web client instance using the specified `BrowserVersion`.
    Parameters:
      `browserVersion` - the browser version to simulate

  - ### WebClient

    public WebClient(BrowserVersion browserVersion, String proxyHost, int proxyPort)
    Creates an instance that will use the specified `BrowserVersion` and proxy server.
    Parameters:
      `browserVersion` - the browser version to simulate
      `proxyHost` - the server that will act as proxy or null for no proxy
      `proxyPort` - the port to use on the proxy server

  - ### WebClient

    public WebClient(BrowserVersion browserVersion, String proxyHost, int proxyPort, String proxyScheme)
    Creates an instance that will use the specified `BrowserVersion` and proxy server.
    Parameters:
      `browserVersion` - the browser version to simulate
      `proxyHost` - the server that will act as proxy or null for no proxy
      `proxyPort` - the port to use on the proxy server
      `proxyScheme` - the scheme http/https

  - ### WebClient

    public WebClient(BrowserVersion browserVersion, boolean javaScriptEngineEnabled, String proxyHost, int proxyPort)
    Creates an instance that will use the specified `BrowserVersion` and proxy server.
    Parameters:
      `browserVersion` - the browser version to simulate
      `javaScriptEngineEnabled` - set to false if the simulated browser should not support javaScript
      `proxyHost` - the server that will act as proxy or null for no proxy
      `proxyPort` - the port to use on the proxy server

  - ### WebClient

    public WebClient(BrowserVersion browserVersion, boolean javaScriptEngineEnabled, String proxyHost, int proxyPort, String proxyScheme)
    Creates an instance that will use the specified `BrowserVersion` and proxy server.
    Parameters:
      `browserVersion` - the browser version to simulate
      `javaScriptEngineEnabled` - set to false if the simulated browser should not support javaScript
      `proxyHost` - the server that will act as proxy or null for no proxy
      `proxyPort` - the port to use on the proxy server
      `proxyScheme` - the scheme http/https

- ## Method Details

  - ### getWebConnection

    public WebConnection getWebConnection()
    Returns the object that will resolve all URL requests.
    Returns:
      the connection that will be used

  - ### setWebConnection

    public void setWebConnection(WebConnection webConnection)
    Sets the object that will resolve all URL requests.
    Parameters:
      `webConnection` - the new web connection

  - ### getPage

    public <P extends Page> P getPage(WebWindow webWindow, WebRequest webRequest) throws IOException, FailingHttpStatusCodeException
    Send a request to a server and return a Page that represents the response from the server. This page will be used to populate the provided window.

    The returned `Page` will be created by the `PageCreator` configured by `setPageCreator(PageCreator)`, if any.

    The `DefaultPageCreator` will create a `Page` depending on the content type of the HTTP response, basically `HtmlPage` for HTML content, `XmlPage` for XML content, `TextPage` for other text content and `UnexpectedPage` for anything else.

    Type Parameters:
      `P` - the page type
    Parameters:
      `webWindow` - the WebWindow to load the result of the request into
      `webRequest` - the web request
    Returns:
      the page returned by the server when the specified request was made in the specified window
    Throws:
      `IOException` - if an IO error occurs
      `FailingHttpStatusCodeException` - if the server returns a failing status code AND the property `WebClientOptions.setThrowExceptionOnFailingStatusCode(boolean)` is set to true
    See Also:
      - `WebRequest`

  - ### getPage

    public <P extends Page> P getPage(String url) throws IOException, FailingHttpStatusCodeException, MalformedURLException
    Convenient method to build a URL and load it into the current WebWindow as it would be done by `getPage(WebWindow, WebRequest)`.
    Type Parameters:
      `P` - the page type
    Parameters:
      `url` - the URL of the new content
    Returns:
      the new page
    Throws:
      `FailingHttpStatusCodeException` - if the server returns a failing status code AND the property `WebClientOptions.setThrowExceptionOnFailingStatusCode(boolean)` is set to true.
      `IOException` - if an IO problem occurs
      `MalformedURLException` - if no URL can be created from the provided string

  - ### getPage

    public <P extends Page> P getPage(URL url) throws IOException, FailingHttpStatusCodeException
    Convenient method to load a URL into the current top WebWindow as it would be done by `getPage(WebWindow, WebRequest)`.
    Type Parameters:
      `P` - the page type
    Parameters:
      `url` - the URL of the new content
    Returns:
      the new page
    Throws:
      `FailingHttpStatusCodeException` - if the server returns a failing status code AND the property `WebClientOptions.setThrowExceptionOnFailingStatusCode(boolean)` is set to true.
      `IOException` - if an IO problem occurs

  - ### getPage

    public <P extends Page> P getPage(WebRequest request) throws IOException, FailingHttpStatusCodeException
    Convenient method to load a web request into the current top WebWindow.
    Type Parameters:
      `P` - the page type
    Parameters:
      `request` - the request parameters
    Returns:
      the new page
    Throws:
      `FailingHttpStatusCodeException` - if the server returns a failing status code AND the property `WebClientOptions.setThrowExceptionOnFailingStatusCode(boolean)` is set to true.
      `IOException` - if an IO problem occurs
    See Also:
      - `getPage(WebWindow,WebRequest)`

  - ### loadWebResponseInto

    public Page loadWebResponseInto(WebResponse webResponse, WebWindow webWindow) throws IOException, FailingHttpStatusCodeException

    Creates a page based on the specified response and inserts it into the specified window. All page initialization and event notification is handled here.

    Note that if the page created is an attachment page, and an `AttachmentHandler` has been registered with this client, the page is not loaded into the specified window; in this case, the page is loaded into a new window, and attachment handling is delegated to the registered `AttachmentHandler`.

    Parameters:
      `webResponse` - the response that will be used to create the new page
      `webWindow` - the window that the new page will be placed within
    Returns:
      the newly created page
    Throws:
      `IOException` - if an IO error occurs
      `FailingHttpStatusCodeException` - if the server returns a failing status code AND the property `WebClientOptions.setThrowExceptionOnFailingStatusCode(boolean)` is set to true
    See Also:
      - `setAttachmentHandler(AttachmentHandler)`

  - ### loadWebResponseInto

    public Page loadWebResponseInto(WebResponse webResponse, WebWindow webWindow, String forceAttachmentWithFilename) throws IOException, FailingHttpStatusCodeException
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.

    Creates a page based on the specified response and inserts it into the specified window. All page initialization and event notification is handled here.

    Note that if the page created is an attachment page, and an `AttachmentHandler` has been registered with this client, the page is not loaded into the specified window; in this case, the page is loaded into a new window, and attachment handling is delegated to the registered `AttachmentHandler`.

    Parameters:
      `webResponse` - the response that will be used to create the new page
      `webWindow` - the window that the new page will be placed within
      `forceAttachmentWithFilename` - if not `null`, handle this as an attachment with the specified name or if an empty string ("") use the filename provided in the response
    Returns:
      the newly created page
    Throws:
      `IOException` - if an IO error occurs
      `FailingHttpStatusCodeException` - if the server returns a failing status code AND the property `WebClientOptions.setThrowExceptionOnFailingStatusCode(boolean)` is set to true
    See Also:
      - `setAttachmentHandler(AttachmentHandler)`

  - ### printContentIfNecessary

    public void printContentIfNecessary(WebResponse webResponse)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.

    Logs the response's content if its status code indicates a request failure and `WebClientOptions.isPrintContentOnFailingStatusCode()` returns `true`.

    Parameters:
      `webResponse` - the response whose content may be logged

  - ### throwFailingHttpStatusCodeExceptionIfNecessary

    public void throwFailingHttpStatusCodeExceptionIfNecessary(WebResponse webResponse)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.

    Throws a `FailingHttpStatusCodeException` if the request's status code indicates a request failure and `WebClientOptions.isThrowExceptionOnFailingStatusCode()` returns `true`.

    Parameters:
      `webResponse` - the response which may trigger a `FailingHttpStatusCodeException`

  - ### addRequestHeader

    public void addRequestHeader(String name, String value)
    Adds a header which will be sent with EVERY request from this client. This list is empty per default; use this to add specific headers for your case.
    Parameters:
      `name` - the name of the header to add
      `value` - the value of the header to add
    See Also:
      - `removeRequestHeader(String)`

  - ### removeRequestHeader

    public void removeRequestHeader(String name)
    Removes a header from being sent with EVERY request from this client. This list is empty per default; use this method to remove specific headers your have added using {`addRequestHeader(String, String)` before.
    You can't use this to avoid sending standard headers like "Accept-Language" or "Sec-Fetch-Dest".
    Parameters:
      `name` - the name of the header to remove
    See Also:
      - `addRequestHeader(java.lang.String, java.lang.String)`

  - ### setCredentialsProvider

    public void setCredentialsProvider(org.apache.http.client.CredentialsProvider credentialsProvider)
    Sets the credentials provider that will provide authentication information when trying to access protected information on a web server. This information is required when the server is using Basic HTTP authentication, NTLM authentication, or Digest authentication.
    Parameters:
      `credentialsProvider` - the new credentials provider to use to authenticate

  - ### getCredentialsProvider

    public org.apache.http.client.CredentialsProvider getCredentialsProvider()
    Returns the credentials provider for this client instance. By default, this method returns an instance of `DefaultCredentialsProvider`.
    Returns:
      the credentials provider for this client instance

  - ### getJavaScriptEngine

    public org.htmlunit.javascript.AbstractJavaScriptEngine<?> getJavaScriptEngine()
    This method is intended for testing only - use at your own risk.
    Returns:
      the current JavaScript engine (never `null`)

  - ### setJavaScriptEngine

    public void setJavaScriptEngine(org.htmlunit.javascript.AbstractJavaScriptEngine<?> engine)
    This method is intended for testing only - use at your own risk.
    Parameters:
      `engine` - the new script engine to use

  - ### getCookieManager

    public CookieManager getCookieManager()
    Returns the cookie manager used by this web client.
    Returns:
      the cookie manager used by this web client

  - ### setCookieManager

    public void setCookieManager(CookieManager cookieManager)
    Sets the cookie manager used by this web client.
    Parameters:
      `cookieManager` - the cookie manager used by this web client

  - ### setAlertHandler

    public void setAlertHandler(AlertHandler alertHandler)
    Sets the alert handler for this webclient.
    Parameters:
      `alertHandler` - the new alerthandler or null if none is specified

  - ### getAlertHandler

    public AlertHandler getAlertHandler()
    Returns the alert handler for this webclient.
    Returns:
      the alert handler or null if one hasn't been set

  - ### setConfirmHandler

    public void setConfirmHandler(ConfirmHandler handler)
    Sets the handler that will be executed when the JavaScript method Window.confirm() is called.
    Parameters:
      `handler` - the new handler or null if no handler is to be used

  - ### getConfirmHandler

    public ConfirmHandler getConfirmHandler()
    Returns the confirm handler.
    Returns:
      the confirm handler or null if one hasn't been set

  - ### setPromptHandler

    public void setPromptHandler(PromptHandler handler)
    Sets the handler that will be executed when the JavaScript method Window.prompt() is called.
    Parameters:
      `handler` - the new handler or null if no handler is to be used

  - ### getPromptHandler

    public PromptHandler getPromptHandler()
    Returns the prompt handler.
    Returns:
      the prompt handler or null if one hasn't been set

  - ### setStatusHandler

    public void setStatusHandler(StatusHandler statusHandler)
    Sets the status handler for this webclient.
    Parameters:
      `statusHandler` - the new status handler or null if none is specified

  - ### getStatusHandler

    public StatusHandler getStatusHandler()
    Returns the status handler for this `WebClient`.
    Returns:
      the status handler or null if one hasn't been set

  - ### getExecutor

    public Executor getExecutor()
    Returns the executor for this `WebClient`.
    Returns:
      the executor

  - ### setExecutor

    public void setExecutor(ExecutorService executor)
    Changes the ExecutorService for this `WebClient`. You have to call this before the first use of the executor, otherwise an IllegalStateExceptions is thrown.
    Parameters:
      `executor` - the new Executor.

  - ### setJavaScriptErrorListener

    public void setJavaScriptErrorListener(org.htmlunit.javascript.JavaScriptErrorListener javaScriptErrorListener)
    Sets the javascript error listener for this `WebClient`. When setting to null, the `DefaultJavaScriptErrorListener` is used.
    Parameters:
      `javaScriptErrorListener` - the new JavaScriptErrorListener or null if none is specified

  - ### getJavaScriptErrorListener

    public org.htmlunit.javascript.JavaScriptErrorListener getJavaScriptErrorListener()
    Returns the javascript error listener for this `WebClient`.
    Returns:
      the javascript error listener or null if one hasn't been set

  - ### getBrowserVersion

    public BrowserVersion getBrowserVersion()
    Returns the current browser version.
    Returns:
      the current browser version

  - ### getCurrentWindow

    public WebWindow getCurrentWindow()
    Returns the "current" window for this client. This window (or its top window) will be used when `getPage(...)` is called without specifying a window.
    Returns:
      the "current" window for this client

  - ### setCurrentWindow

    public void setCurrentWindow(WebWindow window)
    Sets the "current" window for this client. This is the window that will be used when `getPage(...)` is called without specifying a window.
    Parameters:
      `window` - the new "current" window for this client

  - ### addWebWindowListener

    public void addWebWindowListener(WebWindowListener listener)
    Adds a listener for `WebWindowEvent`s. All events from all windows associated with this client will be sent to the specified listener.
    Parameters:
      `listener` - a listener

  - ### removeWebWindowListener

    public void removeWebWindowListener(WebWindowListener listener)
    Removes a listener for `WebWindowEvent`s.
    Parameters:
      `listener` - a listener

  - ### openWindow

    public WebWindow openWindow(URL url, String windowName)
    Open a new window with the specified name. If the URL is non-null then attempt to load a page from that location and put it in the new window.
    Parameters:
      `url` - the URL to load content from or null if no content is to be loaded
      `windowName` - the name of the new window
    Returns:
      the new window

  - ### openWindow

    public WebWindow openWindow(URL url, String windowName, WebWindow opener)
    Open a new window with the specified name. If the URL is non-null then attempt to load a page from that location and put it in the new window.
    Parameters:
      `url` - the URL to load content from or null if no content is to be loaded
      `windowName` - the name of the new window
      `opener` - the web window that is calling openWindow
    Returns:
      the new window

  - ### openTargetWindow

    public WebWindow openTargetWindow(WebWindow opener, String windowName, String defaultName)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Open the window with the specified name. The name may be a special target name of _self, _parent, _top, or _blank. An empty or null name is set to the default. The special target names are relative to the opener window.
    Parameters:
      `opener` - the web window that is calling openWindow
      `windowName` - the name of the new window
      `defaultName` - the default target if no name is given
    Returns:
      the new window

  - ### openDialogWindow

    public DialogWindow openDialogWindow(URL url, WebWindow opener, Object dialogArguments) throws IOException

    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.

    Opens a new dialog window.
    Parameters:
      `url` - the URL of the document to load and display
      `opener` - the web window that is opening the dialog
      `dialogArguments` - the object to make available inside the dialog via `window.dialogArguments`
    Returns:
      the new dialog window
    Throws:
      `IOException` - if there is an IO error

  - ### setPageCreator

    public void setPageCreator(PageCreator pageCreator)
    Sets the object that will be used to create pages. Set this if you want to customize the type of page that is returned for a given content type.
    Parameters:
      `pageCreator` - the new page creator

  - ### getPageCreator

    public PageCreator getPageCreator()
    Returns the current page creator.
    Returns:
      the page creator

  - ### getWebWindowByName

    public WebWindow getWebWindowByName(String name) throws WebWindowNotFoundException
    Returns the first `WebWindow` that matches the specified name.
    Parameters:
      `name` - the name to search for
    Returns:
      the `WebWindow` with the specified name
    Throws:
      `WebWindowNotFoundException` - if the `WebWindow` can't be found
    See Also:
      - `getWebWindows()`
      - `getTopLevelWindows()`

  - ### initialize

    public void initialize(WebWindow webWindow, Page page)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Initializes a new web window for JavaScript.
    Parameters:
      `webWindow` - the new WebWindow
      `page` - the page that will become the enclosing page

  - ### initializeEmptyWindow

    public void initializeEmptyWindow(WebWindow webWindow, Page page)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Initializes a new empty window for JavaScript.
    Parameters:
      `webWindow` - the new WebWindow
      `page` - the page that will become the enclosing page

  - ### registerWebWindow

    public void registerWebWindow(WebWindow webWindow)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Adds a new window to the list of available windows.
    Parameters:
      `webWindow` - the new WebWindow

  - ### deregisterWebWindow

    public void deregisterWebWindow(WebWindow webWindow)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Removes a window from the list of available windows.
    Parameters:
      `webWindow` - the window to remove

  - ### expandUrl

    public static URL expandUrl(URL baseUrl, String relativeUrl) throws MalformedURLException
    Expands a relative URL relative to the specified base. In most situations this is the same as `new URL(baseUrl, relativeUrl)` but there are some cases that URL doesn't handle correctly. See RFC1808 regarding Relative Uniform Resource Locators for more information.
    Parameters:
      `baseUrl` - the base URL
      `relativeUrl` - the relative URL
    Returns:
      the expansion of the specified base and relative URLs
    Throws:
      `MalformedURLException` - if an error occurred when creating a URL object

  - ### guessContentType

    public String guessContentType(File file)
    Tries to guess the content type of the file.
    This utility could be located in a helper class but we can compare this functionality for instance with the "Helper Applications" settings of Mozilla and therefore see it as a property of the "browser".
    Parameters:
      `file` - the file
    Returns:
      "application/octet-stream" if nothing could be guessed

  - ### loadWebResponse

    public WebResponse loadWebResponse(WebRequest webRequest) throws IOException
    Loads a `WebResponse` from the server.
    Parameters:
      `webRequest` - the request
    Returns:
      the WebResponse
    Throws:
      `IOException` - if an IO problem occurs

  - ### getWebWindows

    public List<WebWindow> getWebWindows()
    Returns an immutable list of open web windows (whether they are top level windows or not). This is a snapshot; future changes are not reflected by this list.

    The list is ordered by age, the oldest one first.

    Returns:
      an immutable list of open web windows (whether they are top level windows or not)
    See Also:
      - `getWebWindowByName(String)`
      - `getTopLevelWindows()`

  - ### containsWebWindow

    public boolean containsWebWindow(WebWindow webWindow)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Returns true if the list of WebWindows contains the provided one. This method is there to improve the performance of some internal checks because calling getWebWindows().contains(.) creates some objects without any need.
    Parameters:
      `webWindow` - the window to check
    Returns:
      true or false

  - ### getTopLevelWindows

    public List<TopLevelWindow> getTopLevelWindows()
    Returns an immutable list of open top level windows. This is a snapshot; future changes are not reflected by this list.

    The list is ordered by age, the oldest one first.

    Returns:
      an immutable list of open top level windows
    See Also:
      - `getWebWindowByName(String)`
      - `getWebWindows()`

  - ### setRefreshHandler

    public void setRefreshHandler(RefreshHandler handler)
    Sets the handler to be used whenever a refresh is triggered. Refer to the documentation for `RefreshHandler` for more details.
    Parameters:
      `handler` - the new handler

  - ### getRefreshHandler

    public RefreshHandler getRefreshHandler()
    Returns the current refresh handler. The default refresh handler is a `NiceRefreshHandler(2)`.
    Returns:
      the current RefreshHandler

  - ### setScriptPreProcessor

    public void setScriptPreProcessor(ScriptPreProcessor scriptPreProcessor)
    Sets the script pre processor for this `WebClient`.
    Parameters:
      `scriptPreProcessor` - the new preprocessor or null if none is specified

  - ### getScriptPreProcessor

    public ScriptPreProcessor getScriptPreProcessor()
    Returns the script pre processor for this `WebClient`.
    Returns:
      the pre processor or null of one hasn't been set

  - ### setHTMLParserListener

    public void setHTMLParserListener(org.htmlunit.html.parser.HTMLParserListener listener)
    Sets the listener for messages generated by the HTML parser.
    Parameters:
      `listener` - the new listener, `null` if messages should be totally ignored

  - ### getHTMLParserListener

    public org.htmlunit.html.parser.HTMLParserListener getHTMLParserListener()
    Gets the configured listener for messages generated by the HTML parser.
    Returns:
      `null` if no listener is defined (default value)

  - ### getCssErrorHandler

    public org.htmlunit.cssparser.parser.CSSErrorHandler getCssErrorHandler()
    Returns the CSS error handler used by this web client when CSS problems are encountered.
    Returns:
      the CSS error handler used by this web client when CSS problems are encountered
    See Also:
      - `DefaultCssErrorHandler`
      - `SilentCssErrorHandler`

  - ### setCssErrorHandler

    public void setCssErrorHandler(org.htmlunit.cssparser.parser.CSSErrorHandler cssErrorHandler)
    Sets the CSS error handler used by this web client when CSS problems are encountered.
    Parameters:
      `cssErrorHandler` - the CSS error handler used by this web client when CSS problems are encountered
    See Also:
      - `DefaultCssErrorHandler`
      - `SilentCssErrorHandler`

  - ### setJavaScriptTimeout

    public void setJavaScriptTimeout(long timeout)
    Sets the number of milliseconds that a script is allowed to execute before being terminated. A value of 0 or less means no timeout.
    Parameters:
      `timeout` - the timeout value, in milliseconds

  - ### getJavaScriptTimeout

    public long getJavaScriptTimeout()
    Returns the number of milliseconds that a script is allowed to execute before being terminated. A value of 0 or less means no timeout.
    Returns:
      the timeout value, in milliseconds

  - ### getIncorrectnessListener

    public IncorrectnessListener getIncorrectnessListener()
    Gets the current listener for encountered incorrectness (except HTML parsing messages that are handled by the HTML parser listener). Default value is an instance of `IncorrectnessListenerImpl`.
    Returns:
      the current listener (not `null`)

  - ### setIncorrectnessListener

    public void setIncorrectnessListener(IncorrectnessListener listener)
    Returns the current HTML incorrectness listener.
    Parameters:
      `listener` - the new value (not `null`)

  - ### getWebConsole

    public WebConsole getWebConsole()
    Returns the WebConsole.
    Returns:
      the web console

  - ### getAjaxController

    public AjaxController getAjaxController()
    Gets the current AJAX controller.
    Returns:
      the controller

  - ### setAjaxController

    public void setAjaxController(AjaxController newValue)
    Sets the current AJAX controller.
    Parameters:
      `newValue` - the controller

  - ### setAttachmentHandler

    public void setAttachmentHandler(AttachmentHandler handler)
    Sets the attachment handler.
    Parameters:
      `handler` - the new attachment handler

  - ### getAttachmentHandler

    public AttachmentHandler getAttachmentHandler()
    Returns the current attachment handler.
    Returns:
      the current attachment handler

  - ### setWebStartHandler

    public void setWebStartHandler(org.htmlunit.webstart.WebStartHandler handler)
    Sets the WebStart handler.
    Parameters:
      `handler` - the new WebStart handler

  - ### getWebStartHandler

    public org.htmlunit.webstart.WebStartHandler getWebStartHandler()
    Returns the current WebStart handler.
    Returns:
      the current WebStart handler

  - ### getClipboardHandler

    public ClipboardHandler getClipboardHandler()
    Returns the current clipboard handler.
    Returns:
      the current clipboard handler

  - ### setClipboardHandler

    public void setClipboardHandler(ClipboardHandler handler)
    Sets the clipboard handler.
    Parameters:
      `handler` - the new clipboard handler

  - ### getPrintHandler

    public PrintHandler getPrintHandler()
    Returns the current `PrintHandler`.
    Returns:
      the current `PrintHandler` or null if print requests are ignored

  - ### setPrintHandler

    public void setPrintHandler(PrintHandler handler)
    Sets the `PrintHandler` to be used if Windoe.print() is called (Printing Spec).
    Parameters:
      `handler` - the new `PrintHandler` or null if you like to ignore print requests (default is null)

  - ### getFrameContentHandler

    public FrameContentHandler getFrameContentHandler()
    Returns the current FrameContent handler.
    Returns:
      the current FrameContent handler

  - ### setFrameContentHandler

    public void setFrameContentHandler(FrameContentHandler handler)
    Sets the FrameContent handler.
    Parameters:
      `handler` - the new FrameContent handler

  - ### setOnbeforeunloadHandler

    public void setOnbeforeunloadHandler(OnbeforeunloadHandler onbeforeunloadHandler)
    Sets the onbeforeunload handler for this `WebClient`.
    Parameters:
      `onbeforeunloadHandler` - the new onbeforeunloadHandler or null if none is specified

  - ### getOnbeforeunloadHandler

    public OnbeforeunloadHandler getOnbeforeunloadHandler()
    Returns the onbeforeunload handler for this `WebClient`.
    Returns:
      the onbeforeunload handler or null if one hasn't been set

  - ### getCache

    public Cache getCache()
    Gets the cache currently being used.
    Returns:
      the cache (may not be null)

  - ### setCache

    public void setCache(Cache cache)
    Sets the cache to use.
    Parameters:
      `cache` - the new cache (must not be `null`)

  - ### close

    public void close()
    Closes all opened windows, stopping all background JavaScript processing. The WebClient is not really usable after this - you have to create a new one or use WebClient.reset() instead.

    Specified by:
      `close` in interface `AutoCloseable`

  - ### reset

    public void reset()

    Experimental API: May be changed in next release and may not yet work perfectly!

    This shuts down the whole client and restarts with a new empty window. Cookies and other states are preserved.

  - ### waitForBackgroundJavaScript

    public int waitForBackgroundJavaScript(long timeoutMillis)

    Experimental API: May be changed in next release and may not yet work perfectly!

    This method blocks until all background JavaScript tasks have finished executing. Background JavaScript tasks are JavaScript tasks scheduled for execution via `window.setTimeout`, `window.setInterval` or asynchronous `XMLHttpRequest`.

    If a job is scheduled to begin executing after `(now + timeoutMillis)`, this method will wait for `timeoutMillis` milliseconds and then return a value greater than `0`. This method will never block longer than `timeoutMillis` milliseconds.

    Use this method instead of `waitForBackgroundJavaScriptStartingBefore(long)` if you don't know when your background JavaScript is supposed to start executing, but you're fairly sure that you know how long it should take to finish executing.

    Parameters:
      `timeoutMillis` - the maximum amount of time to wait (in milliseconds)
    Returns:
      the number of background JavaScript jobs still executing or waiting to be executed when this method returns; will be `0` if there are no jobs left to execute

  - ### waitForBackgroundJavaScriptStartingBefore

    public int waitForBackgroundJavaScriptStartingBefore(long delayMillis)

    Experimental API: May be changed in next release and may not yet work perfectly!

    This method blocks until all background JavaScript tasks scheduled to start executing before `(now + delayMillis)` have finished executing. Background JavaScript tasks are JavaScript tasks scheduled for execution via `window.setTimeout`, `window.setInterval` or asynchronous `XMLHttpRequest`.

    If there is no background JavaScript task currently executing, and there is no background JavaScript task scheduled to start executing within the specified time, this method returns immediately -- even if there are tasks scheduled to be executed after `(now + delayMillis)`.

    Note that the total time spent executing a background JavaScript task is never known ahead of time, so this method makes no guarantees as to how long it will block.

    Use this method instead of `waitForBackgroundJavaScript(long)` if you know roughly when your background JavaScript is supposed to start executing, but you're not necessarily sure how long it will take to execute.

    Parameters:
      `delayMillis` - the delay which determines the background tasks to wait for (in milliseconds)
    Returns:
      the number of background JavaScript jobs still executing or waiting to be executed when this method returns; will be `0` if there are no jobs left to execute

  - ### download

    public void download(WebWindow requestingWindow, String target, WebRequest request, boolean checkHash, boolean forceLoad, String forceAttachmentWithFilename, String description)
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Perform the downloads and stores it for loading later into a window. In the future downloads should be performed in parallel in separated threads. TODO: refactor it before next release.
    Parameters:
      `requestingWindow` - the window from which the request comes
      `target` - the name of the target window
      `request` - the request to perform
      `checkHash` - if true check for hashChenage
      `forceLoad` - if true always load the request even if there is already the same in the queue
      `forceAttachmentWithFilename` - if not `null` the AttachmentHandler isAttachment() method is not called, the response has to be handled as attachment in any case
      `description` - information about the origin of the request. Useful for debugging.

  - ### loadDownloadedResponses

    public void loadDownloadedResponses() throws FailingHttpStatusCodeException, IOException
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Loads downloaded responses into the corresponding windows. TODO: refactor it before next release.
    Throws:
      `IOException` - in case of exception
      `FailingHttpStatusCodeException` - in case of exception

  - ### getOptions

    public WebClientOptions getOptions()
    Returns the options object of this WebClient.
    Returns:
      the options object

  - ### getStorageHolder

    public StorageHolder getStorageHolder()
    Gets the holder for the different storages.

    Experimental API: May be changed in next release!

    Returns:
      the holder

  - ### getCookies

    public Set<Cookie> getCookies(URL url)
    Returns the currently configured cookies applicable to the specified URL, in an unmodifiable set. If disabled, this returns an empty set.
    Parameters:
      `url` - the URL on which to filter the returned cookies
    Returns:
      the currently configured cookies applicable to the specified URL, in an unmodifiable set

  - ### addCookie

    public void addCookie(String cookieString, URL pageUrl, Object origin)
    Parses the given cookie and adds this to our cookie store.
    Parameters:
      `cookieString` - the string to parse
      `pageUrl` - the url of the page that likes to set the cookie
      `origin` - the requester

  - ### isJavaScriptEnabled

    public boolean isJavaScriptEnabled()
    Returns true if the javaScript support is enabled. To disable the javascript support (eg. temporary) you have to use the `WebClientOptions.setJavaScriptEnabled(boolean)` setter.
    Returns:
      true if the javaScript engine and the javaScript support is enabled.
    See Also:
      - `isJavaScriptEngineEnabled()`
      - `WebClientOptions.isJavaScriptEnabled()`

  - ### isJavaScriptEngineEnabled

    public boolean isJavaScriptEngineEnabled()
    Returns true if the javaScript engine is enabled. To disable the javascript engine you have to use the `WebClient(BrowserVersion, boolean, String, int)` constructor.
    Returns:
      true if the javaScript engine is enabled.

  - ### loadHtmlCodeIntoCurrentWindow

    public HtmlPage loadHtmlCodeIntoCurrentWindow(String htmlCode) throws IOException
    Parses the given XHtml code string and loads the resulting XHtmlPage into the current window.
    Parameters:
      `htmlCode` - the html code as string
    Returns:
      the HtmlPage
    Throws:
      `IOException` - in case of error

  - ### loadXHtmlCodeIntoCurrentWindow

    public XHtmlPage loadXHtmlCodeIntoCurrentWindow(String xhtmlCode) throws IOException
    Parses the given XHtml code string and loads the resulting XHtmlPage into the current window.
    Parameters:
      `xhtmlCode` - the xhtml code as string
    Returns:
      the XHtmlPage
    Throws:
      `IOException` - in case of error

  - ### getCSS3Parser

    public WebClient.PooledCSS3Parser getCSS3Parser()
    INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.
    Returns:
      a CSS3Parser that will return to an internal pool for reuse if closed using the try-with-resource concept

  - ### isLoadStaticContent

    @Deprecated public boolean isLoadStaticContent()
    Deprecated.
    Returns whether or not download of static content is enabled.

    XLT-specific internal API. May be removed in next release without further notice.

    This is a dummy implementation that just returns `true`.

    Returns:
      `true`