jeffheaton's picture

    In addition to headers, there are other useful options that the HttpURLConnection class provides. Although there are a number of options in the HttpURLConnection class that are used only for very rare or obscure situations, in this section we will examine the two most common options used in the HttpURLConnection class. The two most frequently used are “timeouts” and “redirect following”. The next two sections will cover these options.

Timeout

    When you request that the HttpURLConnection class process a URL, certain operations can timeout. The HttpURLConnection class will wait a certain amount of milliseconds, before it times out. There is a default value of time; however, you can adjust this time to be longer or shorter to suit your needs. There are two different timeouts supported by Java:

  • Timeout while connecting to the web host.
  • Timeout while transferring data with the web host.

    To control the timeout value while connecting to the host, you should use the setConnectionTimeout on the HttpURLConnection class. Likewise, you can call the getConnectionTimeout to determine the current connection timeout. The timeout is measured in milliseconds. For instance, to set the connection timeout to one second you would use the following line of code:

http.setConnectionTimeout(1000);

    To control the timeout value while reading data from the host, you should use the setReadTimeout on the HttpURLConnection class. Likewise, you can call the getReadTimeout to determine the current read timeout. This timeout is also measured in milliseconds. To set the read timeout to one second you would use the following line of code:

http.setReadTimeout(1000);

    Please note that timeouts were added in J2SE 5.0. If you are using an earlier version, these methods and functions will not be available.

Redirect Following

    One very handy feature in HTTP is “redirect following”. Many web sites make use of the HTTP redirect internally, so you will likely encounter redirects when writing a bot. The HTTP redirect allows the server to redirect the web browser to a new URL.

    To see an HTTP redirect in action, enter the following URL into your web browser. You would expect the browser to take you to the URL you entered.

http://www.httprecipes.com/1/4/redirect.php

    However, you do not end up on the above URL. You actually end up at the root of the “Recipe Site” at the following URL:

http://www.httprecipes.com/

    This was due to an HTTP redirect. By default, the HttpURLConnection class will follow all such redirects automatically and often, you do not need to even be concerned with them. Web browsers will always follow redirects automatically. However, if you would like to handle the redirects yourself, you can disable auto following. The following line of code would do this:

http.setInstanceFollowRedirects(false);

    Additionally, you can call a static method and disable auto following for all instances of HttpURLConnection. The following line of code would do this:

HttpURLConnection.setFollowRedirects(false);

    If you disable redirection following, you may manually follow the redirects by looking at the location response header.


Copyright 2005 - 2012 by Heaton Research, Inc.. Heaton Research™ and Encog™ are trademarks of Heaton Research. Click here for copyright, license and trademark information.