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

See all snapshotshttp-client appears in

MIT licensedbyMichael Snoyman
Maintained by[email protected]
This version can be pinned in stack with: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 viaNetwork.HTTP.Client.Internal.requestAction#554

0.7.18

  • Add themanagerSetMaxNumberHeaders function to theClient module to configuremanagerMaxNumberHeaders inManagerSettings.

0.7.17

  • AddmanagerSetMaxHeaderLength toClient to changeManagerSettingsMaxHeaderLength.

0.7.16

  • AddresponseEarlyHints field toResponse, containing a list of all HTTP 103 Early Hints headers received from the server.
  • AddearlyHintHeadersReceived callback toRequest, which will be called on each HTTP 103 Early Hints header section received.

0.7.15

  • AddsshouldStripHeaderOnRedirectIfOnDifferentHostOnly 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 callinggetAddrInfo 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 originalRequest in theResponse. Expose it viagetOriginalRequest.

0.7.7

  • Allow secure cookies for localhost without HTTPS#460

0.7.6

  • AddapplyBearerAuth 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

  • AddedwithSocket toNetwork.HTTP.Client.Connection.

0.7.2.1

  • Fix bug inuseProxySecureWithoutConnect.

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

  • RemoveAI_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

  • AddshouldStripHeaderOnRedirect option toRequest#300

0.6.1.1

  • Ensure thatInt parsing doesn’t overflow#383

0.6.1

  • AddsetUriEither toNetwork.HTTP.Client.Internal

0.6.0

  • GeneralizerenderParts 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 forgetUri 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

0.5.13

  • AddssetRequestCheckStatus andthrowErrorStatusCodes functions.See#304
  • AddwithConnection 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

  • AddedrequestFromURI andrequestFromURI_ functions.
  • Fixed non-TLS connections going though proxy#337

0.5.11

  • Replacedbase64-bytestring dependency withmemory.

0.5.10

  • New function to partial escape query strings

0.5.9

  • AddSemigroup instances for GHC 8.4#320

0.5.8

  • Switch to the new STM-based manager#254
  • Redact sensitive headers#318

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

  • ExposemakeConnection 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

  • Removeinstance Default Request
  • Modifyinstance IsString Request to useparseRequest instead ofparseUrlThrow
  • Clean up theHttpException constructors
  • RenamecheckStatus tocheckResponse and modify type
  • Fix the ugly magic constant workaround for responseTimeout
  • RemovegetConnectionWrapper
  • Add theHttpExceptionRequest 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
    • DeprecateparseUrl
    • AddparseUrlThrow,parseRequest, andparseRequest_

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 newTlsExceptionHostPort 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

  • Supportno_proxy environment variable.#140#145

0.4.20

  • ExposebrReadSome

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 emptyhttp_proxy#128

0.4.13

  • Support for auth via url#124

0.4.12

  • AddedIsString RequestBody instance#126

0.4.11.3

  • Fix getUri to insert “?” to uriQuery when necessary.#123

0.4.11.2

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 constructorsstreamFile andstreamFileObserved, the latter with accompanying typeStreamFileStatus.

0.4.8.1

  • Automatically call withSocketsDo everywhere#107

0.4.8

  • Add theResponseLengthAndChunkingBothUsed exception constructor#108

0.4.7.2

  • Improvedtimeout 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

0.4.0