Strictly consume all remaining chunks of data from the stream.
Since 0.1.0
:: a typeCtrl KGHC 9.14.1 · lts/ghc-9.14.x · 45dd537 · 2026-10-11
Modulehttp-client-0.7.19Haskell2010
Note that this is essentially the "kitchen sink" export module, including many functions intended only to be used internally by this package. No API stability is guaranteed for this module. If you see functions here which you believe should be promoted to a stable API, please contact the author.
Strictly consume all remaining chunks of data from the stream.
Since 0.1.0
Get a single chunk of data from the response body, or an empty bytestring if no more data is available.
Note that in order to consume the entire request body, you will need to
repeatedly call this function until you receive an empty ByteString as a
result.
Since 0.1.0
Continuously call brRead, building up a lazy ByteString until a chunk is constructed that is at least as many bytes as requested.
Since 0.4.20
makeChunkedReader :: Maybe MaxHeaderLength-> IO ()cleanup
-> Boolraw
-> Connection-> IO BodyReaderKeep dropping input until a blank line is found.
dummyConnection :: [ByteString]input
-> IO (Connection, IO [ByteString], IO [ByteString])conn, output, input
For testing
Create a new Connection from a read, write, and close function.
openSocketConnection :: (Socket -> IO ())-> Maybe HostAddress-> Stringhost
-> Intport
-> IO ConnectionopenSocketConnectionSize :: (Socket -> IO ())-> Intchunk size
-> Maybe HostAddress-> Stringhost
-> Intport
-> IO ConnectionCreate a new Connection from a Socket.
strippedHostName takes a URI host name, as extracted
by Network.URI.regName, and strips square brackets
around IPv6 addresses.
The result is suitable for passing to services such as
name resolution (Network.Socket.getAddr).
@since
computeCookieString :: RequestInput request
-> CookieJarCurrent cookie jar
-> UTCTimeValue that should be used as "now"
-> BoolWhether or not this request is coming from an "http" source (not javascript or anything like that)
-> (ByteString, CookieJar)(Contents of a "Cookie" header, Updated cookie jar (last-access-time is updated))
This corresponds to the algorithm described in Section 5.4 "The Cookie Header"
This corresponds to the subcomponent algorithm entitled "Paths" detailed in section 5.1.4
This corresponds to the subcomponent algorithm entitled "Domain Matching" detailed in section 5.1.3
evictExpiredCookies This corresponds to the eviction algorithm described in Section 5.3 "Storage Model"
generateCookie :: SetCookieThe SetCookie we are encountering
-> RequestThe request that originated the response that yielded the SetCookie
-> UTCTimeValue that should be used as "now"
-> BoolWhether or not this request is coming from an "http" source (not javascript or anything like that)
-> Maybe CookieThe optional output cookie
Turn a SetCookie into a Cookie, if it is valid
insertCheckedCookie Insert a cookie created by generateCookie into the cookie jar (or not if it shouldn't be allowed in)
This applies the computeCookieString to a given Request
isPotentiallyTrustworthyOrigin :: BoolTrue if HTTPS
-> ByteStringHost
-> BoolWhether or not the origin is potentially trustworthy
Algorithm described in "Secure Contexts", Section 3.1, "Is origin potentially trustworthy?"
Note per RFC6265 section 5.4 user agent is free to define the meaning of "secure" protocol.
See: https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy
This corresponds to the subcomponent algorithm entitled "Path-Match" detailed in section 5.1.4
receiveSetCookie :: SetCookieThe SetCookie the cookie jar is receiving
-> RequestThe request that originated the response that yielded the SetCookie
-> UTCTimeValue that should be used as "now"
-> BoolWhether or not this request is coming from an "http" source (not javascript or anything like that)
-> CookieJarInput cookie jar to modify
-> CookieJarUpdated cookie jar
This corresponds to the algorithm described in Section 5.3 "Storage Model" This function consists of calling generateCookie followed by insertCheckedCookie. Use this function if you plan to do both in a row. generateCookie and insertCheckedCookie are only provided for more fine-grained control.
updateCookieJar This applies receiveSetCookie to a given Response
The used Manager can be overridden (by requestManagerOverride) and the used Request can be modified (through managerModifyRequest). This function allows to retrieve the possibly overridden Manager and the possibly modified Request.
(In case the Manager is overridden by requestManagerOverride, the Request is being modified by managerModifyRequest of the new Manager, not the old one.)
A convenience wrapper around withResponse which reads in the entire response body and immediately closes the connection. Note that this function performs fully strict I/O, and only uses a lazy ByteString in its response for memory efficiency. If you are anticipating a large response body, you are encouraged to use withResponse and brRead instead.
Since 0.1.0
A convenient wrapper around withResponse which ignores the response body. This is useful, for example, when performing a HEAD request.
Since 0.3.2
Get a Response without any redirect following.
httpRedirect Redirect loop.
httpRedirect' Redirect loop.
This extended version of httpRaw also returns the Request potentially modified by managerModifyRequest.
Close any open resources associated with the given Response. In general,
this will either close an active Connection or return it to the Manager
to be reused.
Since 0.1.0
The most low-level function for initiating an HTTP request.
The first argument to this function gives a full specification on the request: the host to connect to, whether to use SSL, headers, etc. Please see Request for full details. The second argument specifies which Manager should be used.
This function then returns a Response with a BodyReader. The Response contains the status code and headers that were sent back to us, and the BodyReader contains the body of the request. Note that this BodyReader allows you to have fully interleaved IO actions during your HTTP download, making it possible to download very large responses in constant memory.
An important note: the response body returned by this function represents a live HTTP connection. As such, if you do not use the response body, an open socket will be retained indefinitely. You must be certain to call responseClose on this response to free up resources.
This function automatically performs any necessary redirects, as specified by the redirectCount setting.
When implementing a (reverse) proxy using this function or relating functions, it's wise to remove Transfer-Encoding:, Content-Length:, Content-Encoding: and Accept-Encoding: from request and response headers to be relayed.
Since 0.1.0
Perform an action using a Connection acquired from the given Manager.
You should use this only when you have to read and write interactively through the connection (e.g. connection by the WebSocket protocol).
Perform a Request using a connection acquired from the given Manager,
and then provide the Response to the given function. This function is
fully exception safe, guaranteeing that the response will be closed when the
inner function exits. It is defined as:
withResponse req man f = bracket (responseOpen req man) responseClose fIt is recommended that you use this function in place of explicit calls to responseOpen and responseClose.
You will need to use functions such as brRead to consume the response body.
Since 0.1.0
Add a proxy to the Request so that the Request when executed will use the provided proxy.
Since 0.1.0
Send secure requests to the proxy in plain text rather than using CONNECT.
Always decompress a compressed stream.
Add a Basic Auth header (with the specified user name and password) to the given Request. Ignore error handling:
applyBasicAuth "user" "pass" $ parseRequest_ urlNOTE: The function applyDigestAuth is provided by the http-client-tls
package instead of this package due to extra dependencies. Please use that
package if you need to use digest authentication.
Since 0.1.0
Add a Proxy-Authorization header (with the specified username and password) to the given Request. Ignore error handling:
applyBasicProxyAuth "user" "pass" <$> parseRequest "http://example.org"Since 0.3.4
Add a Bearer Auth header to the given Request
Decompress a compressed stream unless the content-type is 'application/x-tar'.
A default request value, a GET request of localhost/:80, with an empty request body.
Note that the default checkResponse does nothing.
Extract basic access authentication info in URI. Return Nothing when there is no auth info in URI.
Extract a URI from the request.
Since 0.1.0
Send a file as the request body, while observing streaming progress via
a PopObserver. Observations are made between reading and sending a chunk.
It is expected that the file size does not change between calling observedStreamFile and making any requests using this request body.
Since 0.4.9
Convert a URL into a Request.
This function defaults some of the values in Request, such as setting method to
and requestHeaders to GET[].
Since this function uses MonadThrow, the return monad can be anything that is an instance of MonadThrow, such as IO or Maybe.
You can place the request method at the beginning of the URL separated by a space, e.g.:
parseRequest "POST http://httpbin.org/post"
Note that the request method must be provided as all capital letters.
A Request created by this function won't cause exceptions on non-2XX response status codes.
To create a request which throws on non-2XX status codes, see parseUrlThrow
Same as parseRequest, but parse errors cause an impure exception. Mostly useful for static strings which are known to be correctly formatted.
Deprecated. Please use parseUrlThrow, parseRequest, or parseRequest_ instead
Deprecated synonym for parseUrlThrow. You probably want parseRequest or parseRequest_ instead.
Same as parseRequest, except will throw an HttpException in the event of a non-2XX response. This uses throwErrorStatusCodes to implement checkResponse.
This can fail if the given URI is not absolute, or if the
URI scheme is not "http" or "https". In these cases the function
will throw an error via MonadThrow.
This function defaults some of the values in Request, such as setting method to
and requestHeaders to GET[].
A Request created by this function won't cause exceptions on non-2XX response status codes.
Same as requestFromURI, but if the conversion would fail, throws an impure exception.
Set the query string to the given key/value pairs.
Since 0.3.6
Set the query string to the given key/value pairs.
Modify the request so that non-2XX status codes generate a runtime StatusCodeException, by using throwErrorStatusCodes
Modify the request so that non-2XX status codes do not generate a runtime StatusCodeException.
Validate a URI, then add it to the request.
Send a file as the request body.
It is expected that the file size does not change between calling streamFile and making any requests using this request body.
Since 0.4.9
Throws a StatusCodeException wrapped in HttpExceptionRequest, if the response's status code indicates an error (if it isn't 2xx). This can be used to implement checkResponse.
Add url-encoded parameters to the Request.
This sets a new requestBody, adds a content-type request header and changes the method to POST.
Since 0.1.0
Retrieve the orignal Request from a Response
Note that the requestBody is not available and always set to empty.
If a request is a redirection (status code 3xx) this function will create
a new request from the old request, the server headers returned with the
redirection, and the redirection code itself. This function returns Nothing
if the code is not a 3xx, there is no location header included, or if the
redirected response couldn't be parsed with parseRequest.
If a user of this library wants to know the url chain that results from a specific request, that user has to re-implement the redirect-following logic themselves. An example of that might look like this:
myHttp req man = do
(res, redirectRequests) <- (`runStateT` []) $
'httpRedirect'
9000
(\req' -> do
res <- http req'{redirectCount=0} man
modify (\rqs -> req' : rqs)
return (res, getRedirectedRequest req req' (responseHeaders res) (responseCookieJar res) (W.statusCode (responseStatus res))
)
'lift'
req
applyCheckStatus (checkStatus req) res
return redirectRequestsgetResponse :: Maybe MaxHeaderLength-> Maybe MaxNumberHeaders-> Maybe Int-> Request-> Managed Connection-> Maybe (IO ())Action to run in case of a '100 Continue'.
-> IO (Response BodyReader)Convert a Response that has a Source body to one with a lazy
ByteString body.
Deprecated. Manager will be closed for you automatically when no longer in use
Close all connections in a Manager.
Note that this doesn't affect currently in-flight connections, meaning you can safely use it without hurting any queries you may have concurrently running.
Since 0.1.0
Default value for ManagerSettings.
Note that this value does not have support for SSL/TLS. If you need to
make any https connections, please use the http-client-tls package, which
provides a tlsManagerSettings value.
Since 0.1.0
The default proxy settings for a manager. In particular: if the http_proxy (or https_proxy) environment variable is set, use it. Otherwise, use the values in the Request.
Since 0.4.7
Drop the Proxy-Authorization header from the request if we're using a secure proxy.
Create a Manager. The Manager will be shut down automatically via
garbage collection.
Creating a new Manager is a relatively expensive operation, you are advised to share a single Manager between requests instead.
The first argument to this function is often defaultManagerSettings, though add-on libraries may provide a recommended replacement.
Since 0.1.0
Never connect using a proxy, regardless of the proxy value in the Request.
Since 0.4.7
proxyEnvironmentNamed :: Textenvironment variable name
-> Maybe Proxyfallback if no environment set
-> ProxyOverrideSame as proxyEnvironment, but instead of default environment variable names, allows you to set your own name.
Since 0.4.7
Get the proxy settings from the Request itself.
Since 0.4.7
A value for the managerRawConnection setting, but also allows you to
modify the underlying Socket to set additional settings. For a motivating
use case, see: https://github.com/snoyberg/http-client/issues/71.
Since 0.3.8
Same as rawConnectionModifySocket, but also takes in a chunk size.
Use the given proxy settings, regardless of the proxy value in the Request.
Since 0.4.7
Send secure requests to the proxy in plain text rather than using CONNECT,
regardless of the value in the Request.
Deprecated. Use newManager instead
Create, use and close a Manager.
Since 0.2.1
Settings for a Manager. Please use the defaultManagerSettings function and then modify
individual settings. For more information, see http://www.yesodweb.com/book/settings-types.
Since 0.1.0
ManagerSettingsmanagerConnCount :: IntNumber of connections to a single host to keep alive. Default: 10.
Since 0.1.0
managerRawConnection :: IO (Maybe HostAddress -> String -> Int -> IO Connection)Create an insecure connection.
Since 0.1.0
managerTlsConnection :: IO (Maybe HostAddress -> String -> Int -> IO Connection)Create a TLS connection. Default behavior: throw an exception that TLS is not supported.
Since 0.1.0
managerTlsProxyConnection :: IO (ByteString -> (Connection -> IO ()) -> String -> Maybe HostAddress -> String -> Int -> IO Connection)Create a TLS proxy connection. Default behavior: throw an exception that TLS is not supported.
Since 0.2.2
managerResponseTimeout :: ResponseTimeoutDefault timeout to be applied to requests which do not provide a timeout value.
Default is 30 seconds
managerRetryableException :: SomeException -> BoolExceptions for which we should retry our request if we were reusing an already open connection. In the case of IOExceptions, for example, we assume that the connection was closed on the server and therefore open a new one.
Since 0.1.0
managerWrapException :: forall a. Request -> IO a -> IO aAction wrapped around all attempted Requests, usually used to wrap
up exceptions in library-specific types.
Default: wrap all IOExceptions in the InternalException constructor.
managerIdleConnectionCount :: IntTotal number of idle connection to keep open at a given time.
This limit helps deal with the case where you are making a large number of connections to different hosts. Without this limit, you could run out of file descriptors. Additionally, it can be set to zero to prevent reuse of any connections. Doing this is useful when the server your application is talking to sits behind a load balancer.
Default: 512
Since 0.3.7
managerModifyRequest :: Request -> IO RequestPerform the given modification to a Request before performing it.
This function may be called more than once during request processing. see https://github.com/snoyberg/http-client/issues/350
Default: no modification
Since 0.4.4
managerModifyResponse :: Response BodyReader -> IO (Response BodyReader)Perform the given modification to a Response after receiving it.
Default: no modification
managerProxyInsecure :: ProxyOverrideHow HTTP proxy server settings should be discovered.
Default: respect the proxy value on the Request itself.
Since 0.4.7
managerProxySecure :: ProxyOverrideHow HTTPS proxy server settings should be discovered.
Default: respect the proxy value on the Request itself.
Since 0.4.7
managerMaxHeaderLength :: Maybe MaxHeaderLengthConfigure the maximum size, in bytes, of an HTTP header field.
Default: 4096
managerMaxNumberHeaders :: Maybe MaxNumberHeadersConfigure the maximum number of HTTP header fields.
Default: 100
Instead of instance Ord Cookie. See equalCookie, equivCookie.
See equalCookie.
Equality of name, domain, path only. This corresponds to step 11 of the algorithm
described in Section 5.3 "Storage Model". See also: equal.
See equalCookieJar, equalCookie.
An IO action that represents an incoming response body coming from the
server. Data provided by this action has already been gunzipped and
de-chunked, and respects any content-length headers present.
The action gets a single chunk of data from the response body, or an empty bytestring if no more data is available.
Since 0.4.0
Hostname or resolved host address.
ConnKey consists of a hostname, a port and a Bool
specifying whether to use SSL.
ConnectionconnectionRead :: IO ByteStringIf no more data, return empty.
connectionUnread :: ByteString -> IO ()Return data to be read next time.
connectionWrite :: ByteString -> IO ()Send data to server
connectionClose :: IO ()Close connection. Any successive operation on the connection (except closing) should fail with ConnectionClosed exception. It is allowed to close connection multiple times.
Read CookieJarDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow CookieJarDefined in http-client-0.7.19 · Network.HTTP.Client.TypesSemigroup CookieJarDefined in http-client-0.7.19 · Network.HTTP.Client.TypesMonoid CookieJarDefined in http-client-0.7.19 · Network.HTTP.Client.TypesSince 1.9
A function which will provide a Popper to a NeedsPopper. This seemingly convoluted structure allows for creation of request bodies which allocate scarce resources in an exception safe manner.
Since 0.1.0
getHttpManager :: a -> ManagerHasHttpManager ManagerDefined in http-client-0.7.19 · Network.HTTP.Client.TypesAn exception which may be generated by this library
HttpExceptionRequest Request HttpExceptionContentMost exceptions are specific to a Request. Inspect the HttpExceptionContent value for details on what occurred.
InvalidUrlException String StringA URL (first field) is invalid for a given reason (second argument).
Show HttpExceptionDefined in http-client-0.7.19 · Network.HTTP.Client.TypesException HttpExceptionDefined in http-client-0.7.19 · Network.HTTP.Client.TypesStatusCodeException (Response ()) ByteStringGenerated by the parseUrlThrow function when the
server returns a non-2XX response status code.
May include the beginning of the response body.
TooManyRedirects [Response ByteString]The server responded with too many redirects for a request.
Contains the list of encountered responses containing redirects in reverse chronological order; including last redirect, which triggered the exception and was not followed.
OverlongHeadersToo many total bytes in the HTTP header were returned by the server.
TooManyHeaderFieldsToo many HTTP header fields were returned by the server.
ResponseTimeoutThe server took too long to return a response. This can be altered via responseTimeout or managerResponseTimeout.
ConnectionTimeoutAttempting to connect to the server timed out.
ConnectionFailure SomeExceptionAn exception occurred when trying to connect to the server.
InvalidStatusLine ByteStringThe status line returned by the server could not be parsed.
InvalidHeader ByteStringThe given response header line could not be parsed
InvalidRequestHeader ByteStringThe given request header is not compliant (e.g. has newlines)
InternalException SomeExceptionAn exception was raised by an underlying library when performing the request. Most often, this is caused by a failing socket action or a TLS exception.
ProxyConnectException ByteString Int StatusA non-200 status code was returned when trying to connect to the proxy server on the given host and port.
NoResponseDataReceivedNo response data was received from the server at all. This exception may deserve special handling within the library, since it may indicate that a pipelining has been used, and a connection thought to be open was in fact closed.
TlsNotSupportedException thrown when using a Manager which does not
have support for secure connections. Typically, you will
want to use tlsManagerSettings from http-client-tls
to overcome this.
WrongRequestBodyStreamSize Word64 Word64The request body provided did not match the expected size.
Provides the expected and actual size.
ResponseBodyTooShort Word64 Word64The returned response body is too short. Provides the expected size and actual size.
InvalidChunkHeadersA chunked response body had invalid headers.
IncompleteHeadersAn incomplete set of response headers were returned.
InvalidDestinationHost ByteStringThe host we tried to connect to is invalid (e.g., an empty string).
HttpZlibException ZlibExceptionAn exception was thrown when inflating a response body.
InvalidProxyEnvironmentVariable Text TextValues in the proxy environment variable were invalid. Provides the environment variable name and its value.
ConnectionClosedAttempted to use a Connection which was already closed
InvalidProxySettings TextProxy settings are not valid (Windows specific currently) @since 0.5.7
Show HttpExceptionContentDefined in http-client-0.7.19 · Network.HTTP.Client.TypesKeeps track of open connections for keep-alive.
If possible, you should share a single Manager between multiple threads and requests.
Since 0.1.0
ManagermConns :: KeyedPool ConnKey ConnectionmResponseTimeout :: ResponseTimeoutCopied from managerResponseTimeout
mRetryableException :: SomeException -> BoolmWrapException :: forall a. Request -> IO a -> IO amModifyRequest :: Request -> IO RequestmSetProxy :: Request -> RequestmModifyResponse :: Response BodyReader -> IO (Response BodyReader)See managerProxy
mMaxHeaderLength :: Maybe MaxHeaderLengthmMaxNumberHeaders :: Maybe MaxNumberHeadersHasHttpManager ManagerDefined in http-client-0.7.19 · Network.HTTP.Client.TypesSettings for a Manager. Please use the defaultManagerSettings function and then modify
individual settings. For more information, see http://www.yesodweb.com/book/settings-types.
Since 0.1.0
ManagerSettingsmanagerConnCount :: IntNumber of connections to a single host to keep alive. Default: 10.
Since 0.1.0
managerRawConnection :: IO (Maybe HostAddress -> String -> Int -> IO Connection)Create an insecure connection.
Since 0.1.0
managerTlsConnection :: IO (Maybe HostAddress -> String -> Int -> IO Connection)Create a TLS connection. Default behavior: throw an exception that TLS is not supported.
Since 0.1.0
managerTlsProxyConnection :: IO (ByteString -> (Connection -> IO ()) -> String -> Maybe HostAddress -> String -> Int -> IO Connection)Create a TLS proxy connection. Default behavior: throw an exception that TLS is not supported.
Since 0.2.2
managerResponseTimeout :: ResponseTimeoutDefault timeout to be applied to requests which do not provide a timeout value.
Default is 30 seconds
managerRetryableException :: SomeException -> BoolExceptions for which we should retry our request if we were reusing an already open connection. In the case of IOExceptions, for example, we assume that the connection was closed on the server and therefore open a new one.
Since 0.1.0
managerWrapException :: forall a. Request -> IO a -> IO aAction wrapped around all attempted Requests, usually used to wrap
up exceptions in library-specific types.
Default: wrap all IOExceptions in the InternalException constructor.
managerIdleConnectionCount :: IntTotal number of idle connection to keep open at a given time.
This limit helps deal with the case where you are making a large number of connections to different hosts. Without this limit, you could run out of file descriptors. Additionally, it can be set to zero to prevent reuse of any connections. Doing this is useful when the server your application is talking to sits behind a load balancer.
Default: 512
Since 0.3.7
managerModifyRequest :: Request -> IO RequestPerform the given modification to a Request before performing it.
This function may be called more than once during request processing. see https://github.com/snoyberg/http-client/issues/350
Default: no modification
Since 0.4.4
managerModifyResponse :: Response BodyReader -> IO (Response BodyReader)Perform the given modification to a Response after receiving it.
Default: no modification
managerProxyInsecure :: ProxyOverrideHow HTTP proxy server settings should be discovered.
Default: respect the proxy value on the Request itself.
Since 0.4.7
managerProxySecure :: ProxyOverrideHow HTTPS proxy server settings should be discovered.
Default: respect the proxy value on the Request itself.
Since 0.4.7
managerMaxHeaderLength :: Maybe MaxHeaderLengthConfigure the maximum size, in bytes, of an HTTP header field.
Default: 4096
managerMaxNumberHeaders :: Maybe MaxNumberHeadersConfigure the maximum number of HTTP header fields.
Default: 100
The maximum header size in bytes.
Bounded MaxHeaderLengthDefined in http-client-0.7.19 · Network.HTTP.Client.TypesEnum MaxHeaderLengthDefined in http-client-0.7.19 · Network.HTTP.Client.TypesEq MaxHeaderLengthDefined in http-client-0.7.19 · Network.HTTP.Client.TypesNum MaxHeaderLengthDefined in http-client-0.7.19 · Network.HTTP.Client.TypesOrd MaxHeaderLengthDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow MaxHeaderLengthDefined in http-client-0.7.19 · Network.HTTP.Client.TypesThe maximum number of header fields.
Bounded MaxNumberHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesEnum MaxNumberHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesEq MaxNumberHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesNum MaxNumberHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesOrd MaxNumberHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow MaxNumberHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesA function which must be provided with a Popper.
Since 0.1.0
A function which generates successive chunks of a request body, provider a single empty bytestring when no more data is available.
Since 0.1.0
Define a HTTP proxy, consisting of a hostname and port number.
ProxyproxyHost :: ByteStringThe host name of the HTTP proxy in URI format. IPv6 addresses in square brackets.
proxyPort :: IntThe port number of the HTTP proxy.
How the HTTP proxy server settings should be discovered.
Since 0.4.7
ProxyOverriderunProxyOverride :: Bool -> IO (Request -> Request)Define how to make secure connections using a proxy server.
ProxySecureWithConnectUse the HTTP CONNECT verb to forward a secure connection through the proxy.
ProxySecureWithoutConnectSend the request directly to the proxy with an https URL. This mode can be used to offload TLS handling to a trusted local proxy.
Eq ProxySecureModeDefined in http-client-0.7.19 · Network.HTTP.Client.TypesOrd ProxySecureModeDefined in http-client-0.7.19 · Network.HTTP.Client.TypesRead ProxySecureModeDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow ProxySecureModeDefined in http-client-0.7.19 · Network.HTTP.Client.TypesAll information on how to connect to a host and what should be sent in the HTTP request.
If you simply wish to download from a URL, see parseRequest.
The constructor for this data type is not exposed. Instead, you should use
either the defaultRequest value, or parseRequest to
construct from a URL, and then use the records below to make modifications.
This approach allows http-client to add configuration options without
breaking backwards compatibility.
For example, to construct a POST request, you could do something like:
initReq <- parseRequest "http://www.example.com/path"
let req = initReq
{ method = "POST"
}For more information, please see http://www.yesodweb.com/book/settings-types.
Since 0.1.0
Requestmethod :: MethodHTTP request method, eg GET, POST.
Since 0.1.0
secure :: BoolWhether to use HTTPS (ie, SSL).
Since 0.1.0
host :: ByteStringRequested host name, used for both the IP address to connect to and
the host request header.
This is in URI format, with raw IPv6 addresses enclosed in square brackets.
Use strippedHostName when making network connections.
Since 0.1.0
port :: IntThe port to connect to. Also used for generating the host request header.
Since 0.1.0
path :: ByteStringEverything from the host to the query string.
Since 0.1.0
queryString :: ByteStringQuery string appended to the path.
Since 0.1.0
requestHeaders :: RequestHeadersCustom HTTP request headers
The Content-Length and Transfer-Encoding headers are set automatically
by this module, and shall not be added to requestHeaders.
If not provided by the user, Host will automatically be set based on
the host and port fields.
Moreover, the Accept-Encoding header is set implicitly to gzip for convenience by default. This behaviour can be overridden if needed, by setting the header explicitly to a different value. In order to omit the Accept-Header altogether, set it to the empty string "". If you need an empty Accept-Header (i.e. requesting the identity encoding), set it to a non-empty white-space string, e.g. " ". See RFC 2616 section 14.3 for details about the semantics of the Accept-Header field. If you request a content-encoding not supported by this module, you will have to decode it yourself (see also the decompress field).
Note: Multiple header fields with the same field-name will result in multiple header fields being sent and therefore it's the responsibility of the client code to ensure that the rules from RFC 2616 section 4.2 are honoured.
Since 0.1.0
requestBody :: RequestBodyRequest body to be sent to the server.
Since 0.1.0
proxy :: Maybe ProxyOptional HTTP proxy.
Since 0.1.0
hostAddress :: Maybe HostAddressOptional resolved host address. May not be used by all backends.
Since 0.1.0
rawBody :: BoolIf True, a chunked and/or gzipped body will not be
decoded. Use with caution.
Since 0.1.0
decompress :: ByteString -> BoolPredicate to specify whether gzipped data should be
decompressed on the fly (see alwaysDecompress and
browserDecompress). Argument is the mime type.
Default: browserDecompress.
Since 0.1.0
redirectCount :: IntHow many redirects to follow when getting a resource. 0 means follow no redirects. Default value: 10.
Since 0.1.0
checkResponse :: Request -> Response BodyReader -> IO ()Check the response immediately after receiving the status and headers. This can be useful for throwing exceptions on non-success status codes.
In previous versions of http-client, this went under the name
checkStatus, but was renamed to avoid confusion about the new default
behavior (doing nothing).
responseTimeout :: ResponseTimeoutNumber of microseconds to wait for a response (see ResponseTimeout for more information). Default: use managerResponseTimeout (which by default is 30 seconds).
Since 0.1.0
requestVersion :: HttpVersionHTTP version to send to server.
Default: HTTP 1.1
Since 0.4.3
onRequestBodyException :: SomeException -> IO ()How to deal with exceptions thrown while sending the request.
Default: ignore IOExceptions, rethrow all other exceptions.
Since: 0.4.6
requestManagerOverride :: Maybe ManagerA Manager value that should override whatever Manager value was
passed in to the HTTP request function manually. This is useful when
dealing with implicit global managers, such as in Network.HTTP.Simple
shouldStripHeaderOnRedirect :: HeaderName -> BoolDecide whether a header must be stripped from the request when following a redirect. Default: keep all headers intact.
shouldStripHeaderOnRedirectIfOnDifferentHostOnly :: BoolDecide whether a header must be stripped from the request when following a redirect, if host differs from previous request in redirect chain. Default: false (always strip regardless of host change)
proxySecureMode :: ProxySecureModeHow to proxy an HTTPS request.
Default: Use HTTP CONNECT.
redactHeaders :: Set HeaderNameList of header values being redacted in case we show Request.
earlyHintHeadersReceived :: [Header] -> IO ()Called every time an HTTP 103 Early Hints header section is received from the server.
Show RequestDefined in http-client-0.7.19 · Network.HTTP.Client.TypesIsString RequestDefined in http-client-0.7.19 · Network.HTTP.Client.Request · orphanParses a URL via parseRequest_
NOTE: Prior to version 0.5.0, this instance used parseUrlThrow instead.
When using one of the RequestBodyStream / RequestBodyStreamChunked constructors, you must ensure that the GivesPopper can be called multiple times. Usually this is not a problem.
The RequestBodyStreamChunked will send a chunked request body. Note that not all servers support this. Only use RequestBodyStreamChunked if you know the server you're sending to supports chunked request bodies.
Since 0.1.0
RequestBodyLBS ByteStringRequestBodyBS ByteStringRequestBodyBuilder Int64 BuilderRequestBodyStream Int64 (GivesPopper ())RequestBodyStreamChunked (GivesPopper ())RequestBodyIO (IO RequestBody)Allows creation of a RequestBody inside the IO monad, which is
useful for making easier APIs (like setRequestBodyFile).
IsString RequestBodyDefined in http-client-0.7.19 · Network.HTTP.Client.TypesSince 0.4.12
Semigroup RequestBodyDefined in http-client-0.7.19 · Network.HTTP.Client.TypesMonoid RequestBodyDefined in http-client-0.7.19 · Network.HTTP.Client.TypesA simple representation of the HTTP response.
Since 0.1.0
ResponseresponseStatus :: StatusStatus code of the response.
Since 0.1.0
responseVersion :: HttpVersionHTTP version used by the server.
Since 0.1.0
responseHeaders :: ResponseHeadersResponse headers sent by the server.
Since 0.1.0
responseBody :: bodyResponse body sent by the server.
Since 0.1.0
responseCookieJar :: CookieJarCookies set on the client after interacting with the server. If
cookies have been disabled by setting cookieJar to Nothing, then
this will always be empty.
Since 0.1.0
responseClose' :: ResponseCloseReleases any resource held by this response. If the response body has not been fully read yet, doing so after this call will likely be impossible.
Since 0.1.0
responseOriginalRequest :: RequestHolds original Request related to this Response (with an empty body).
This field is intentionally not exported directly, but made available
via getOriginalRequest instead.
Since 0.7.8
responseEarlyHints :: ResponseHeadersEarly response headers sent by the server, as part of an HTTP 103 Early Hints section.
Since 0.7.16
Functor ResponseDefined in http-client-0.7.19 · Network.HTTP.Client.TypesFoldable ResponseDefined in http-client-0.7.19 · Network.HTTP.Client.TypesTraversable ResponseDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow body => Show (Response body)Defined in http-client-0.7.19 · Network.HTTP.Client.TypesShow ResponseCloseDefined in http-client-0.7.19 · Network.HTTP.Client.TypesHow to deal with timing out on retrieval of response headers.
ResponseTimeoutMicro !IntWait the given number of microseconds for response headers to load, then throw an exception
ResponseTimeoutNoneWait indefinitely
ResponseTimeoutDefaultFall back to the manager setting (managerResponseTimeout) or, in its absence, Wait 30 seconds and then throw an exception.
Eq ResponseTimeoutDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow ResponseTimeoutDefined in http-client-0.7.19 · Network.HTTP.Client.TypesEq StatusHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesOrd StatusHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow StatusHeadersDefined in http-client-0.7.19 · Network.HTTP.Client.TypesStatus of streaming a request body from a file.
Since 0.4.9
Eq StreamFileStatusDefined in http-client-0.7.19 · Network.HTTP.Client.TypesOrd StreamFileStatusDefined in http-client-0.7.19 · Network.HTTP.Client.TypesShow StreamFileStatusDefined in http-client-0.7.19 · Network.HTTP.Client.TypesRead a positive Int, accounting for overflow
For testing purposes only: create a dummy Managed wrapper