org.apache.commons.httpclient

Class HttpConnection

public class HttpConnection extends Object

An abstraction of an HTTP InputStream and OutputStream pair, together with the relevant attributes.

The following options are set on the socket before getting the input/output streams in the open method:

Socket Method Sockets Option Configuration
java.net.Socket#setTcpNoDelay(boolean) SO_NODELAY HttpConnectionParams
java.net.Socket#setSoTimeout(int) SO_TIMEOUT HttpConnectionParams
java.net.Socket#setSendBufferSize(int) SO_SNDBUF HttpConnectionParams
java.net.Socket#setReceiveBufferSize(int) SO_RCVBUF HttpConnectionParams

Version: $Revision: 327792 $ $Date: 2005-10-23 09:34:28 -0400 (Sun, 23 Oct 2005) $

Author: Rod Waldhoff Sean C. Sullivan Ortwin Glueck Jeff Dever Mike Bowler Oleg Kalnichevski Michael Becke Eric E Johnson Laura Werner

Field Summary
protected booleanisOpen
Whether or not the connection is connected.
Constructor Summary
HttpConnection(String host, int port)
Creates a new HTTP connection for the given host and port.
HttpConnection(String host, int port, Protocol protocol)
Creates a new HTTP connection for the given host and port using the given protocol.
HttpConnection(String host, String virtualHost, int port, Protocol protocol)
Creates a new HTTP connection for the given host with the virtual alias and port using given protocol.
HttpConnection(String proxyHost, int proxyPort, String host, int port)
Creates a new HTTP connection for the given host and port via the given proxy host and port using the default protocol.
HttpConnection(HostConfiguration hostConfiguration)
Creates a new HTTP connection for the given host configuration.
HttpConnection(String proxyHost, int proxyPort, String host, String virtualHost, int port, Protocol protocol)
Creates a new HTTP connection for the given host with the virtual alias and port via the given proxy host and port using the given protocol.
HttpConnection(String proxyHost, int proxyPort, String host, int port, Protocol protocol)
Creates a new HTTP connection for the given host with the virtual alias and port via the given proxy host and port using the given protocol.
Method Summary
protected voidassertNotOpen()
Throws an IllegalStateException if the connection is already open.
protected voidassertOpen()
Throws an IllegalStateException if the connection is not open.
voidclose()
Closes the socket and streams.
booleancloseIfStale()
Closes the connection if stale.
protected voidcloseSocketAndStreams()
Closes everything out.
voidflushRequestOutputStream()
Flushes the output request stream.
StringgetHost()
Returns the host.
HttpConnectionManagergetHttpConnectionManager()
Returns the httpConnectionManager.
InputStreamgetLastResponseInputStream()
Returns the stream used to read the last response's body.
InetAddressgetLocalAddress()
Return the local address used when creating the connection.
HttpConnectionParamsgetParams()
Returns HTTP protocol parameters associated with this method.
intgetPort()
Returns the port of the host.
ProtocolgetProtocol()
Returns the protocol used to establish the connection.
StringgetProxyHost()
Returns the proxy host.
intgetProxyPort()
Returns the port of the proxy host.
OutputStreamgetRequestOutputStream()
Returns an OutputStream suitable for writing the request.
InputStreamgetResponseInputStream()
Return a InputStream suitable for reading the response.
intgetSendBufferSize()
Gets the socket's sendBufferSize.
protected SocketgetSocket()
Returns the connection socket.
intgetSoTimeout()
Returns the Socket's timeout, via Socket#getSoTimeout, if the connection is already open.
StringgetVirtualHost()
Returns the target virtual host.
protected booleanisLocked()
Tests if the connection is locked.
booleanisOpen()
Tests if the connection is open.
booleanisProxied()
Returns true if the connection is established via a proxy, false otherwise.
booleanisResponseAvailable()
Tests if input data avaialble.
booleanisResponseAvailable(int timeout)
Tests if input data becomes available within the given period time in milliseconds.
booleanisSecure()
Returns true if the connection is established over a secure protocol.
protected booleanisStale()
Determines whether this connection is "stale", which is to say that either it is no longer open, or an attempt to read the connection would fail.
booleanisStaleCheckingEnabled()
Tests if stale checking is enabled.
booleanisTransparent()
Indicates if the connection is completely transparent from end to end.
voidopen()
Establishes a connection to the specified host and port (via a proxy if specified).
voidprint(String data)
voidprint(String data, String charset)
Writes the specified String (as bytes) to the output stream.
voidprintLine(String data)
voidprintLine(String data, String charset)
Writes the specified String (as bytes), followed by "\r\n".getBytes() to the output stream.
voidprintLine()
Writes "\r\n".getBytes() to the output stream.
StringreadLine()
Reads up to "\n" from the (unchunked) input stream.
StringreadLine(String charset)
Reads up to "\n" from the (unchunked) input stream.
voidreleaseConnection()
Releases the connection.
voidsetConnectionTimeout(int timeout)
Sets the connection timeout.
voidsetHost(String host)
Sets the host to connect to.
voidsetHttpConnectionManager(HttpConnectionManager httpConnectionManager)
Sets the httpConnectionManager.
voidsetLastResponseInputStream(InputStream inStream)
Set the state to keep track of the last response for the last request.
voidsetLocalAddress(InetAddress localAddress)
Set the local address used when creating the connection.
protected voidsetLocked(boolean locked)
Locks or unlocks the connection.
voidsetParams(HttpConnectionParams params)
Assigns HTTP protocol parameters for this method.
voidsetPort(int port)
Sets the port to connect to.
voidsetProtocol(Protocol protocol)
Sets the protocol used to establish the connection
voidsetProxyHost(String host)
Sets the host to proxy through.
voidsetProxyPort(int port)
Sets the port of the host to proxy through.
voidsetSendBufferSize(int sendBufferSize)
Sets the socket's sendBufferSize.
voidsetSocketTimeout(int timeout)
Sets SO_TIMEOUT value directly on the underlying Socket socket.
voidsetSoTimeout(int timeout)
Set the Socket's timeout, via Socket#setSoTimeout.
voidsetStaleCheckingEnabled(boolean staleCheckEnabled)
Sets whether or not isStale() will be called when testing if this connection is open.
voidsetVirtualHost(String host)
Sets the virtual host to target.
voidshutdownOutput()
Attempts to shutdown the Socket's output, via Socket.shutdownOutput() when running on JVM 1.3 or higher.
voidtunnelCreated()
Instructs the proxy to establish a secure tunnel to the host.
voidwrite(byte[] data)
Writes the specified bytes to the output stream.
voidwrite(byte[] data, int offset, int length)
Writes length bytes in data starting at offset to the output stream.
voidwriteLine(byte[] data)
Writes the specified bytes, followed by "\r\n".getBytes() to the output stream.
voidwriteLine()
Writes "\r\n".getBytes() to the output stream.

Field Detail

isOpen

protected boolean isOpen
Whether or not the connection is connected.

Constructor Detail

HttpConnection

public HttpConnection(String host, int port)
Creates a new HTTP connection for the given host and port.

Parameters: host the host to connect to port the port to connect to

HttpConnection

public HttpConnection(String host, int port, Protocol protocol)
Creates a new HTTP connection for the given host and port using the given protocol.

Parameters: host the host to connect to port the port to connect to protocol the protocol to use

HttpConnection

public HttpConnection(String host, String virtualHost, int port, Protocol protocol)
Creates a new HTTP connection for the given host with the virtual alias and port using given protocol.

Parameters: host the host to connect to virtualHost the virtual host requests will be sent to port the port to connect to protocol the protocol to use

HttpConnection

public HttpConnection(String proxyHost, int proxyPort, String host, int port)
Creates a new HTTP connection for the given host and port via the given proxy host and port using the default protocol.

Parameters: proxyHost the host to proxy via proxyPort the port to proxy via host the host to connect to port the port to connect to

HttpConnection

public HttpConnection(HostConfiguration hostConfiguration)
Creates a new HTTP connection for the given host configuration.

Parameters: hostConfiguration the host/proxy/protocol to use

HttpConnection

public HttpConnection(String proxyHost, int proxyPort, String host, String virtualHost, int port, Protocol protocol)

Deprecated: use #HttpConnection(String, int, String, int, Protocol)

Creates a new HTTP connection for the given host with the virtual alias and port via the given proxy host and port using the given protocol.

Parameters: proxyHost the host to proxy via proxyPort the port to proxy via host the host to connect to. Parameter value must be non-null. virtualHost No longer applicable. port the port to connect to protocol The protocol to use. Parameter value must be non-null.

HttpConnection

public HttpConnection(String proxyHost, int proxyPort, String host, int port, Protocol protocol)
Creates a new HTTP connection for the given host with the virtual alias and port via the given proxy host and port using the given protocol.

Parameters: proxyHost the host to proxy via proxyPort the port to proxy via host the host to connect to. Parameter value must be non-null. port the port to connect to protocol The protocol to use. Parameter value must be non-null.

Method Detail

assertNotOpen

protected void assertNotOpen()
Throws an IllegalStateException if the connection is already open.

Throws: IllegalStateException if connected

assertOpen

protected void assertOpen()
Throws an IllegalStateException if the connection is not open.

Throws: IllegalStateException if not connected

close

public void close()
Closes the socket and streams.

closeIfStale

public boolean closeIfStale()
Closes the connection if stale.

Returns: true if the connection was stale and therefore closed, false otherwise.

Since: 3.0

See Also:

closeSocketAndStreams

protected void closeSocketAndStreams()
Closes everything out.

flushRequestOutputStream

public void flushRequestOutputStream()
Flushes the output request stream. This method should be called to ensure that data written to the request OutputStream is sent to the server.

Throws: IOException if an I/O problem occurs

getHost

public String getHost()
Returns the host.

Returns: the host.

getHttpConnectionManager

public HttpConnectionManager getHttpConnectionManager()
Returns the httpConnectionManager.

Returns: HttpConnectionManager

getLastResponseInputStream

public InputStream getLastResponseInputStream()
Returns the stream used to read the last response's body.

Clients will generally not need to call this function unless using HttpConnection directly, instead of calling HttpClient. For those clients, call this function, and if it returns a non-null stream, close the stream before attempting to execute a method. Note that calling "close" on the stream returned by this function may close the connection if the previous response contained a "Connection: close" header.

Returns: An InputStream corresponding to the body of the last response.

getLocalAddress

public InetAddress getLocalAddress()
Return the local address used when creating the connection. If null, the default address is used.

Returns: InetAddress the local address to be used when creating Sockets

getParams

public HttpConnectionParams getParams()
Returns HTTP protocol parameters associated with this method.

Returns: HTTP parameters.

Since: 3.0

getPort

public int getPort()
Returns the port of the host. If the port is -1 (or less than 0) the default port for the current protocol is returned.

Returns: the port.

getProtocol

public Protocol getProtocol()
Returns the protocol used to establish the connection.

Returns: The protocol

getProxyHost

public String getProxyHost()
Returns the proxy host.

Returns: the proxy host.

getProxyPort

public int getProxyPort()
Returns the port of the proxy host.

Returns: the proxy port.

getRequestOutputStream

public OutputStream getRequestOutputStream()
Returns an OutputStream suitable for writing the request.

Returns: a stream to write the request to

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

getResponseInputStream

public InputStream getResponseInputStream()
Return a InputStream suitable for reading the response.

Returns: InputStream The response input stream.

Throws: IOException If an IO problem occurs IllegalStateException If the connection isn't open.

getSendBufferSize

public int getSendBufferSize()
Gets the socket's sendBufferSize.

Returns: the size of the buffer for the socket OutputStream, -1 if the value has not been set and the socket has not been opened

Throws: SocketException if an error occurs while getting the socket value

See Also: Socket#getSendBufferSize()

getSocket

protected Socket getSocket()
Returns the connection socket.

Returns: the socket.

Since: 3.0

getSoTimeout

public int getSoTimeout()

Deprecated: Use getSoTimeout, getParams.

Returns the Socket's timeout, via Socket#getSoTimeout, if the connection is already open. If no connection is open, return the value subsequent connection will use.

Note: This is not a connection timeout but a timeout on network traffic!

Returns: the timeout value

getVirtualHost

public String getVirtualHost()

Deprecated: no longer applicable

Returns the target virtual host.

Returns: the virtual host.

isLocked

protected boolean isLocked()
Tests if the connection is locked. Locked connections cannot be released. An attempt to release a locked connection will have no effect.

Returns: true if the connection is locked, false otherwise.

Since: 3.0

isOpen

public boolean isOpen()
Tests if the connection is open.

Returns: true if the connection is open

isProxied

public boolean isProxied()
Returns true if the connection is established via a proxy, false otherwise.

Returns: true if a proxy is used to establish the connection, false otherwise.

isResponseAvailable

public boolean isResponseAvailable()
Tests if input data avaialble. This method returns immediately and does not perform any read operations on the input socket

Returns: boolean true if input data is available, false otherwise.

Throws: IOException If an IO problem occurs IllegalStateException If the connection isn't open.

isResponseAvailable

public boolean isResponseAvailable(int timeout)
Tests if input data becomes available within the given period time in milliseconds.

Parameters: timeout The number milliseconds to wait for input data to become available

Returns: boolean true if input data is availble, false otherwise.

Throws: IOException If an IO problem occurs IllegalStateException If the connection isn't open.

isSecure

public boolean isSecure()
Returns true if the connection is established over a secure protocol.

Returns: true if connected over a secure protocol.

isStale

protected boolean isStale()
Determines whether this connection is "stale", which is to say that either it is no longer open, or an attempt to read the connection would fail.

Unfortunately, due to the limitations of the JREs prior to 1.4, it is not possible to test a connection to see if both the read and write channels are open - except by reading and writing. This leads to a difficulty when some connections leave the "write" channel open, but close the read channel and ignore the request. This function attempts to ameliorate that problem by doing a test read, assuming that the caller will be doing a write followed by a read, rather than the other way around.

To avoid side-effects, the underlying connection is wrapped by a BufferedInputStream, so although data might be read, what is visible to clients of the connection will not change with this call.Returns: true if the connection is already closed, or a read would fail.

Throws: IOException if the stale connection test is interrupted.

isStaleCheckingEnabled

public boolean isStaleCheckingEnabled()

Deprecated: Use isStaleCheckingEnabled, getParams.

Tests if stale checking is enabled.

Returns: true if enabled

See Also:

isTransparent

public boolean isTransparent()
Indicates if the connection is completely transparent from end to end.

Returns: true if conncetion is not proxied or tunneled through a transparent proxy; false otherwise.

open

public void open()
Establishes a connection to the specified host and port (via a proxy if specified). The underlying socket is created from the ProtocolSocketFactory.

Throws: IOException if an attempt to establish the connection results in an I/O error.

print

public void print(String data)

Deprecated: Use HttpConnection Writes the specified String (as bytes) to the output stream.

Parameters: data the string to be written

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

print

public void print(String data, String charset)
Writes the specified String (as bytes) to the output stream.

Parameters: data the string to be written charset the charset to use for writing the data

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

Since: 3.0

printLine

public void printLine(String data)

Deprecated: Use HttpConnection Writes the specified String (as bytes), followed by "\r\n".getBytes() to the output stream.

Parameters: data the data to be written

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

printLine

public void printLine(String data, String charset)
Writes the specified String (as bytes), followed by "\r\n".getBytes() to the output stream.

Parameters: data the data to be written charset the charset to use for writing the data

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

Since: 3.0

printLine

public void printLine()
Writes "\r\n".getBytes() to the output stream.

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

readLine

public String readLine()

Deprecated: use #readLine(String)

Reads up to "\n" from the (unchunked) input stream. If the stream ends before the line terminator is found, the last part of the string will still be returned.

Returns: a line from the response

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

readLine

public String readLine(String charset)
Reads up to "\n" from the (unchunked) input stream. If the stream ends before the line terminator is found, the last part of the string will still be returned.

Parameters: charset the charset to use for reading the data

Returns: a line from the response

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

Since: 3.0

releaseConnection

public void releaseConnection()
Releases the connection. If the connection is locked or does not have a connection manager associated with it, this method has no effect. Note that it is completely safe to call this method multiple times.

setConnectionTimeout

public void setConnectionTimeout(int timeout)

Deprecated: Use HttpConnectionParams, getParams.

Sets the connection timeout. This is the maximum time that may be spent until a connection is established. The connection will fail after this amount of time.

Parameters: timeout The timeout in milliseconds. 0 means timeout is not used.

setHost

public void setHost(String host)
Sets the host to connect to.

Parameters: host the host to connect to. Parameter value must be non-null.

Throws: IllegalStateException if the connection is already open

setHttpConnectionManager

public void setHttpConnectionManager(HttpConnectionManager httpConnectionManager)
Sets the httpConnectionManager.

Parameters: httpConnectionManager The httpConnectionManager to set

setLastResponseInputStream

public void setLastResponseInputStream(InputStream inStream)
Set the state to keep track of the last response for the last request.

The connection managers use this to ensure that previous requests are properly closed before a new request is attempted. That way, a GET request need not be read in its entirety before a new request is issued. Instead, this stream can be closed as appropriate.

Parameters: inStream The stream associated with an HttpMethod.

setLocalAddress

public void setLocalAddress(InetAddress localAddress)
Set the local address used when creating the connection. If unset or null, the default address is used.

Parameters: localAddress the local address to use

setLocked

protected void setLocked(boolean locked)
Locks or unlocks the connection. Locked connections cannot be released. An attempt to release a locked connection will have no effect.

Parameters: locked true to lock the connection, false to unlock the connection.

Since: 3.0

setParams

public void setParams(HttpConnectionParams params)
Assigns HTTP protocol parameters for this method.

Since: 3.0

See Also: HttpConnectionParams

setPort

public void setPort(int port)
Sets the port to connect to.

Parameters: port the port to connect to

Throws: IllegalStateException if the connection is already open

setProtocol

public void setProtocol(Protocol protocol)
Sets the protocol used to establish the connection

Parameters: protocol The protocol to use.

Throws: IllegalStateException if the connection is already open

setProxyHost

public void setProxyHost(String host)
Sets the host to proxy through.

Parameters: host the host to proxy through.

Throws: IllegalStateException if the connection is already open

setProxyPort

public void setProxyPort(int port)
Sets the port of the host to proxy through.

Parameters: port the port of the host to proxy through.

Throws: IllegalStateException if the connection is already open

setSendBufferSize

public void setSendBufferSize(int sendBufferSize)

Deprecated: Use HttpConnectionParams, getParams.

Sets the socket's sendBufferSize.

Parameters: sendBufferSize the size to set for the socket OutputStream

Throws: SocketException if an error occurs while setting the socket value

See Also: Socket#setSendBufferSize(int)

setSocketTimeout

public void setSocketTimeout(int timeout)
Sets SO_TIMEOUT value directly on the underlying Socket socket. This method does not change the default read timeout value set via HttpConnectionParams.

Parameters: timeout the timeout value

Throws: SocketException - if there is an error in the underlying protocol, such as a TCP error. IllegalStateException if not connected

Since: 3.0

setSoTimeout

public void setSoTimeout(int timeout)

Deprecated: Use HttpConnectionParams, getParams.

Set the Socket's timeout, via Socket#setSoTimeout. If the connection is already open, the SO_TIMEOUT is changed. If no connection is open, then subsequent connections will use the timeout value.

Note: This is not a connection timeout but a timeout on network traffic!

Parameters: timeout the timeout value

Throws: SocketException - if there is an error in the underlying protocol, such as a TCP error.

setStaleCheckingEnabled

public void setStaleCheckingEnabled(boolean staleCheckEnabled)

Deprecated: Use HttpConnectionParams, getParams.

Sets whether or not isStale() will be called when testing if this connection is open.

Setting this flag to false will increase performance when reusing connections, but it will also make them less reliable. Stale checking ensures that connections are viable before they are used. When set to false some method executions will result in IOExceptions and they will have to be retried.

Parameters: staleCheckEnabled true to enable isStale()

See Also: isStale

setVirtualHost

public void setVirtualHost(String host)

Deprecated: no longer applicable

Sets the virtual host to target.

Parameters: host the virtual host name that should be used instead of physical host name when sending HTTP requests. Virtual host name can be set to null if virtual host name is not to be used

Throws: IllegalStateException if the connection is already open

shutdownOutput

public void shutdownOutput()

Deprecated: unused

Attempts to shutdown the Socket's output, via Socket.shutdownOutput() when running on JVM 1.3 or higher.

tunnelCreated

public void tunnelCreated()
Instructs the proxy to establish a secure tunnel to the host. The socket will be switched to the secure socket. Subsequent communication is done via the secure socket. The method can only be called once on a proxied secure connection.

Throws: IllegalStateException if connection is not secure and proxied or if the socket is already secure. IOException if an attempt to establish the secure tunnel results in an I/O error.

write

public void write(byte[] data)
Writes the specified bytes to the output stream.

Parameters: data the data to be written

Throws: IllegalStateException if not connected IOException if an I/O problem occurs

See Also: (byte[],int,int)

write

public void write(byte[] data, int offset, int length)
Writes length bytes in data starting at offset to the output stream. The general contract for write(b, off, len) is that some of the bytes in the array b are written to the output stream in order; element b[off] is the first byte written and b[off+len-1] is the last byte written by this operation.

Parameters: data array containing the data to be written. offset the start offset in the data. length the number of bytes to write.

Throws: IllegalStateException if not connected IOException if an I/O problem occurs

writeLine

public void writeLine(byte[] data)
Writes the specified bytes, followed by "\r\n".getBytes() to the output stream.

Parameters: data the bytes to be written

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

writeLine

public void writeLine()
Writes "\r\n".getBytes() to the output stream.

Throws: IllegalStateException if the connection is not open IOException if an I/O problem occurs

Copyright (c) 1999-2005 - Apache Software Foundation