http-client
An HTTP client engine
https://github.com/snoyberg/http-client
LTS Haskell 23.17: | 0.7.19 |
Stackage Nightly 2025-04-01: | 0.7.19 |
Latest on Hackage: | 0.7.19 |
http-client-0.7.19@sha256:1f0950bab7fe751370ce4ec736c7836dd8a68a757a083ee7f690a9c976d7205e,5613
Module documentation for 0.7.19
http-client
Full tutorial docs are available at:https://github.com/snoyberg/http-client/blob/master/TUTORIAL.md
An HTTP client engine, intended as a base layer for more user-friendly packages.
This codebase has been refactored fromhttp-conduit.
Note that, if you want to make HTTPS secure connections, you should usehttp-client-tls in additionto this library.
Below is a series of cookbook recipes. A number of recipes exist elsewhere,includingNetwork.HTTP.Client
andNetwork.HTTP.Conduit
. The goal is toexpand this list over time.
Proxy environment variable
Use the following approach to get proxy settings from thehttp_proxy
andhttps_proxy
environment variables.
{-# LANGUAGE OverloadedStrings #-}import Network.HTTP.Clientmain :: IO ()main = do let settings = managerSetProxy (proxyEnvironment Nothing) defaultManagerSettings man <- newManager settings let req = "http://httpbin.org" -- Note that the following settings will be completely ignored. { proxy = Just $ Proxy "localhost" 1234 } httpLbs req man >>= print
Changes
Changelog for http-client
0.7.19
- Make mockable via
Network.HTTP.Client.Internal.requestAction
#554
0.7.18
- Add the
managerSetMaxNumberHeaders
function to theClient
module to configuremanagerMaxNumberHeaders
inManagerSettings
.
0.7.17
- Add
managerSetMaxHeaderLength
toClient
to changeManagerSettings
MaxHeaderLength
.
0.7.16
- Add
responseEarlyHints
field toResponse
, containing a list of all HTTP 103 Early Hints headers received from the server. - Add
earlyHintHeadersReceived
callback toRequest
, which will be called on each HTTP 103 Early Hints header section received.
0.7.15
- Adds
shouldStripHeaderOnRedirectIfOnDifferentHostOnly
option toRequest
#520
0.7.14
- Allow customizing max header length#514
0.7.13
- Create the ability to redact custom header values to censor sensitive information
0.7.12
- Fix premature connection closing due to weak reference lifetimes#490
0.7.11
- Allow making requests to raw IPv6 hosts#477
- Catch “resource vanished” exception on initial response read#480
- Search for reachable IP addresses asynchronously (RFC 6555, 8305) after calling
getAddrInfo
to reduce latency#472.
0.7.10
- Consume trailers and last CRLF of chunked body. The trailers are not exposed,unless the raw body is requested.
0.7.9
- Exceptions from streamed request body now cause the request to fail. Previously they wererouted through onRequestBodyException and, by default, the IOExceptions were discarded.
0.7.8
- Include the original
Request
in theResponse
. Expose it viagetOriginalRequest
.
0.7.7
- Allow secure cookies for localhost without HTTPS#460
0.7.6
- Add
applyBearerAuth
function#457
0.7.5
- Force closing connections in case of exceptions throwing#454.
0.7.4
- Depend on base64-bytestring instead of memory#453
0.7.3
- Added
withSocket
toNetwork.HTTP.Client.Connection
.
0.7.2.1
- Fix bug in
useProxySecureWithoutConnect
.
0.7.2
- Add a new proxy mode, proxySecureWithoutConnect, for sending HTTPS requests in plain text to a proxy without using the CONNECT method.
0.7.1
- Remove
AI_ADDRCONFIG
#400
0.7.0
- Remove Eq instances for Cookie, CookieJar, Response, Ord instance for Cookie#435
0.6.4.1
- Win32 2.8 support#430
0.6.4
- Avoid throwing an exception when a malformed HTTP header is received,to be as robust as commonly used HTTP clients.See#398
0.6.3
- Detect response body termination before reading an extra null chunkwhen possible. This allows connections to be reused in some cornercases. See#395
0.6.2
- Add
shouldStripHeaderOnRedirect
option toRequest
#300
0.6.1.1
- Ensure that
Int
parsing doesn’t overflow#383
0.6.1
- Add
setUriEither
toNetwork.HTTP.Client.Internal
0.6.0
- Generalize
renderParts
over arbitrary applicative functors. One particularuse case that is enabled by this change is that nowrenderParts
can be usedin pure code by using it in combination withrunIdentity
.
0.5.14
- Omit port for
getUri
when protocol ishttp
and port is80
, or whenprotocol ishttps
and port is443
- Sending requests with invalid headers now throws InvalidRequestHeader exception
0.5.13.1
- Add a workaround for a cabal bughaskell-infra/hackage-trustees#165
0.5.13
- Adds
setRequestCheckStatus
andthrowErrorStatusCodes
functions.See#304 - Add
withConnection
function.See#352.
0.5.12.1
- Make the chunked transfer-encoding detection case insensitive#303
- Remove some unneeded language extensions
- Mark older versions of GHC as unsupported
0.5.12
- Added
requestFromURI
andrequestFromURI_
functions. - Fixed non-TLS connections going though proxy#337
0.5.11
- Replaced
base64-bytestring
dependency withmemory
.
0.5.10
- New function to partial escape query strings
0.5.9
- Add
Semigroup
instances for GHC 8.4#320
0.5.8
0.5.7.1
- Code cleanup/delete dead code
- Compat with Win32 2.6#309
0.5.7.0
- Support for Windows system proxy settings#274
0.5.6.1
- Revert socks5 and socks5h support from#262; the support wasuntested and did not work as intended.
0.5.6
- Added socks5 and socks5h support#262
0.5.5
- http-client should allow to log requests and responses#248
0.5.4
- Derive ‘Eq’ for ‘ResponseTimeout’#239
0.5.3.4
- Doc improvements
0.5.3.3
- Add missing colon in Host header#235
0.5.3.2
- Minor doc updates
0.5.3.1
- The closeConnection method for tls connections should not be called multipletimes#225
0.5.3
- Expose
makeConnection
andsocketConnection
as a stable API#223
0.5.2
- Enable rawConnectionModifySocketSize to expose openSocketConnectionSize#218
0.5.1
- Enable managerModifyRequest to modify redirectCount#208
0.5.0.1
- Doc fix
0.5.0
- Remove
instance Default Request
- Modify
instance IsString Request
to useparseRequest
instead ofparseUrlThrow
- Clean up the
HttpException
constructors - Rename
checkStatus
tocheckResponse
and modify type - Fix the ugly magic constant workaround for responseTimeout
- Remove
getConnectionWrapper
- Add the
HttpExceptionRequest
wrapper so that all exceptions related to arequest are thrown with that request’s information
0.4.31
- Added length validation for RequestBodyStream#205
0.4.30
- Initial implementation of#193
- Deprecate
parseUrl
- Add
parseUrlThrow
,parseRequest
, andparseRequest_
- Deprecate
0.4.29
- Changed the order of connecting a socket and tweaking a socket, such that the socket tweaking callback now happen before connecting.
- add setRequestIgnoreStatus#201
- Added missing Host: HTTP header for https CONNECT#192
- Fix: Redirects will be followed in httpRaw’ when reusing a dead connection#195
0.4.28
- Add support for including request method in URL
requestManagerOverride
RequestBodyIO
0.4.27.1
- Incorrect idle connection count in HTTP manager#185
0.4.27
- Enable managerModifyRequest to modify checkStatus#179
0.4.26.2
- Fix compilation for GHC 7.4
0.4.26.1
- Fix compilation for GHC < 7.10
0.4.26
- Make sure we never read from or write to closed socket#170
0.4.25
- Don’t error out when response body flushing fails#169
0.4.24
- Use a new
TlsExceptionHostPort
exception to indicate the host and port of the server we were trying to connect to when a TLS exception occurred. Seecommercialhaskell/stack#1010
0.4.23
- Case insensitive cookie domains#158
0.4.22
- ProxyConnectException now returns Right HttpException.#155
0.4.21
0.4.20
- Expose
brReadSome
0.4.19
- Move HasHttpManager from http-conduit to http-client#147
- Chunked request bodies use less TCP packets#149
0.4.18
0.4.17
- Case insensitive proxy environment variables#135
0.4.16
- Proxy auth for HTTPS#132
0.4.15
- Support proxy authentication in environment variables#129
0.4.14
- Ignore empty
http_proxy
#128
0.4.13
- Support for auth via url#124
0.4.12
- Added
IsString RequestBody
instance#126
0.4.11.3
- Fix getUri to insert “?” to uriQuery when necessary.#123
0.4.11.2
- Removed publicsuffixlist dependency, seeGithub discussion
0.4.11.1
- Disable custom timeout code#116
0.4.11
- Ignore the ‘Content-Length’ header if the body contains chunked data#115
0.4.10
- Expect: 100-continue#114
0.4.9
- Add RequestBody smart constructors
streamFile
andstreamFileObserved
, the latter with accompanying typeStreamFileStatus
.
0.4.8.1
- Automatically call withSocketsDo everywhere#107
0.4.8
- Add the
ResponseLengthAndChunkingBothUsed
exception constructor#108
0.4.7.2
- Improved
timeout
implementation for high contention cases#98
0.4.7.1
- Fix for shared connections in proxy servers#103
0.4.7
0.4.6.1
Separate tests not requiring internet access.#93
0.4.6
AddonRequestBodyException
toRequest
to allow for recovering fromexceptions when sending the request. Most useful for servers which terminatethe connection after sending a response body without flushing the request body.
0.4.5
AddopenSocketConnectionSize
and increase default chunk size to 8192.
0.4.4
AddmanagerModifyRequest
field toManagerSettings
.
0.4.3
AddrequestVersion
field toRequest
.
0.4.2
The reaper thread for a manager will go to sleep completely when there are no connection to manage. See:https://github.com/snoyberg/http-client/issues/70
0.4.1
- Provide the
responseOpenHistory
/withResponseHistory
API. See:https://github.com/snoyberg/http-client/pull/79
0.4.0
- Hide the
Part
constructor, and allow for additional headers. See:https://github.com/snoyberg/http-client/issues/76