# Poco::Net

# class HTTPClientSession

Library: Net
Package: HTTPClient
Header: Poco/Net/HTTPClientSession.h

## Description

This class implements the client-side of a HTTP session.

To send a HTTP request to a HTTP server, first instantiate a HTTPClientSession object and specify the server's host name and port number.

Then create a HTTPRequest object, fill it accordingly, and pass it as argument to the sendRequst() method.

sendRequest() will return an output stream that can be used to send the request body, if there is any.

After you are done sending the request body, create a HTTPResponse object and pass it to receiveResponse().

This will return an input stream that can be used to read the response body.

See RFC 2616 <http://www.faqs.org/rfcs/rfc2616.html> for more information about the HTTP protocol.

## Inheritance

Direct Base Classes: HTTPSession

All Base Classes: HTTPSession

Known Derived Classes: HTTPSClientSession

## Member Summary

Member Functions: deleteRequestStream, deleteResponseStream, getExpectResponseBody, getHost, getKeepAliveTimeout, getPort, getProxyHost, getProxyPort, getRequestStream, getResponseStream, mustReconnect, proxyRequestPrefix, receiveResponse, reconnect, sendRequest, setExpectResponseBody, setHost, setKeepAliveTimeout, setPort, setProxy, setProxyHost, setProxyPort, setReconnect, setRequestStream, setResponseStream, write

Inherited Functions: abort, attachSocket, buffered, close, connect, connected, detachSocket, get, getKeepAlive, getTimeout, networkException, peek, read, receive, refill, setException, setKeepAlive, setTimeout, socket, write

## Enumerations

### Anonymous

DEFAULT_KEEP_ALIVE_TIMEOUT = 8

## Constructors

### HTTPClientSession

HTTPClientSession();

Creates an unconnected HTTPClientSession.

### HTTPClientSession

explicit HTTPClientSession(
const StreamSocket & socket
);

Creates a HTTPClientSession using the given socket. The socket must not be connected. The session takes ownership of the socket.

### HTTPClientSession

explicit HTTPClientSession(
const SocketAddress & address
);

Creates a HTTPClientSession using the given address.

### HTTPClientSession

HTTPClientSession(
const std::string & host,
Poco::UInt16 port = HTTPSession::HTTP_PORT
);

Creates a HTTPClientSession using the given host and port.

## Destructor

### ~HTTPClientSession

virtual ~HTTPClientSession();

Destroys the HTTPClientSession and closes the underlying socket.

## Member Functions

### getHost

const std::string & getHost() const;

Returns the host name of the target HTTP server.

### getKeepAliveTimeout

const Poco::Timespan & getKeepAliveTimeout() const;

Returns the connection timeout for HTTP connections.

### getPort

Poco::UInt16 getPort() const;

Returns the port number of the target HTTP server.

### getProxyHost

const std::string & getProxyHost() const;

Returns the proxy host name.

### getProxyPort

Poco::UInt16 getProxyPort() const;

Returns the proxy port number.

### receiveResponse

virtual std::istream & receiveResponse(
HTTPResponse & response
);

Receives the header for the response to the previous HTTP request.

The returned input stream can be used to read the response body. The stream is valid until sendRequest() is called or the session is destroyed.

### sendRequest

virtual std::ostream & sendRequest(
HTTPRequest & request
);

Sends the header for the given HTTP request to the server.

The HTTPClientSession will set the request's Host and Keep-Alive headers accordingly.

The returned output stream can be used to write the request body. The stream is valid until receiveResponse() is called or the session is destroyed.

### setHost

void setHost(
const std::string & host
);

Sets the host name of the target HTTP server.

The host must not be changed once there is an open connection to the server.

### setKeepAliveTimeout

void setKeepAliveTimeout(
const Poco::Timespan & timeout
);

Sets the connection timeout for HTTP connections.

### setPort

void setPort(
Poco::UInt16 port
);

Sets the port number of the target HTTP server.

The port number must not be changed once there is an open connection to the server.

### setProxy

void setProxy(
const std::string & host,
Poco::UInt16 port = HTTPSession::HTTP_PORT
);

Sets the proxy host name and port number.

### setProxyHost

void setProxyHost(
const std::string & host
);

Sets the host name of the proxy server.

### setProxyPort

void setProxyPort(
Poco::UInt16 port
);

Sets the port number of the proxy server.

### deleteRequestStream

void deleteRequestStream();

Deletes the request stream and sets it to 0.

### deleteResponseStream

void deleteResponseStream();

Deletes the response stream and sets it to 0.

### getExpectResponseBody

bool getExpectResponseBody() const;

Returns _expectResponseBody.

### getRequestStream

std::ostream * getRequestStream() const;

Returns the currently set request stream. Can return 0.

### getResponseStream

std::istream * getResponseStream() const;

Returns the currently set response stream. Can return 0.

### mustReconnect

bool mustReconnect() const;

Checks if we can reuse a persistent connection.

### proxyRequestPrefix

virtual std::string proxyRequestPrefix() const;

Returns the prefix prepended to the URI for proxy requests (e.g., "http://myhost.com").

### reconnect

void reconnect();

Connects the underlying socket to the HTTP server.

### setExpectResponseBody

void setExpectResponseBody(
bool expect
);

Sets _expectResponseBody.

### setReconnect

void setReconnect(
bool recon
);

Sets _reconnect.

### setRequestStream

void setRequestStream(
std::ostream * pRequestStream
);

Sets the request stream if and only if _pRequestStream is 0.

### setResponseStream

void setResponseStream(
std::istream * pRespStream
);

Sets the response stream if and only if _pResponseStream is 0.

### write

int write(
const char * buffer,
std::streamsize length
);

Tries to re-connect if keep-alive is on.

See also: Poco::Net::HTTPSession::write()