http-proxy-0.0.11: A library for writing HTTP and HTTPS proxies

Safe HaskellSafe-Infered

Network.HTTP.Proxy

Description

This module contains a simple HTTP and HTTPS proxy. In the most basic setup, the caller specifies a port and runs it as follows:

 -- Run a HTTPS and HTTPS proxy on port 3128.
 import Network.HTTP.Proxy

 main :: IO ()
 main = runProxy 3128

Synopsis

Documentation

runProxy :: Port -> IO ()Source

Run a HTTP and HTTPS proxy server on the specified port. This calls runProxySettings with defaultSettings.

runProxySettings :: Settings -> IO ()Source

Run a HTTP and HTTPS proxy server with the specified settings.

data Settings Source

Various proxy server settings. This is purposely kept as an abstract data type so that new settings can be added without breaking backwards compatibility. In order to create a Settings value, use defaultSettings and record syntax to modify individual records. For example:

 defaultSettings { proxyPort = 3128 }

Constructors

Settings 

Fields

proxyPort :: Int

Port to listen on. Default value: 3100

proxyHost :: HostPreference

Default value: HostIPv4

proxyOnException :: SomeException -> IO ()

What to do with exceptions thrown by either the application or server. Default: ignore server-generated exceptions (see InvalidRequest) and print application-generated applications to stderr.

proxyTimeout :: Int

Timeout value in seconds. Default value: 30

proxyRequestModifier :: Request -> IO Request

A function that allows the the request to be modified before being run. Default: 'return . id'.

proxyLogger :: ByteString -> IO ()

A function for logging proxy internal state. Default: 'return ()'.

proxyUpstream :: Maybe UpstreamProxy

Optional upstream proxy.

defaultSettings :: SettingsSource

The default settings for the Proxy server. See the individual settings for the default value.

data UpstreamProxy Source

A http-proxy can be configured to use and upstream proxy by providing the proxy name, the port it listens to and an option username and password for proxy authorisation.

Constructors

UpstreamProxy 

Fields

upstreamHost :: ByteString

The upstream proxy's hostname.

upstreamPort :: Int

The upstream proxy's port number.

upstreamAuth :: Maybe (ByteString, ByteString)

Optional username and password to use with upstream proxy.

data Request

Information on the request sent by the client. This abstracts away the details of the underlying implementation.

Constructors

Request 

Fields

requestMethod :: Method
 
httpVersion :: HttpVersion
 
rawPathInfo :: ByteString

Extra path information sent by the client. The meaning varies slightly depending on backend; in a standalone server setting, this is most likely all information after the domain name. In a CGI application, this would be the information following the path to the CGI executable itself. Do not modify this raw value- modify pathInfo instead.

rawQueryString :: ByteString

If no query string was specified, this should be empty. This value will include the leading question mark. Do not modify this raw value- modify queryString instead.

serverName :: ByteString

Generally the host requested by the user via the Host request header. Backends are free to provide alternative values as necessary. This value should not be used to construct URLs.

serverPort :: Int

The listening port that the server received this request on. It is possible for a server to listen on a non-numeric port (i.e., Unix named socket), in which case this value will be arbitrary. Like serverName, this value should not be used in URL construction.

requestHeaders :: RequestHeaders
 
isSecure :: Bool

Was this request made over an SSL connection?

remoteHost :: SockAddr

The client's host information.

pathInfo :: [Text]

Path info in individual pieces- the url without a hostname/port and without a query string, split on forward slashes,

queryString :: Query

Parsed query string information

requestBody :: Source IO ByteString
 
vault :: Vault

A location for arbitrary data to be shared by applications and middleware.

Instances