request

[ bsd3, library, web ] [ Propose Tags ]

"HTTP client for haskell, inpired by requests and http-dispatch."


[Skip to Readme]
Versions [faq] 0.1.0.0, 0.1.1.0, 0.1.2.0, 0.1.3.0, 0.2.0.0, 0.2.1.0
Dependencies base (>=4.7 && <5), bytestring (>=0.10.12 && <0.11), case-insensitive (>=1.2.1 && <1.3), http-client (>=0.6.4 && <0.7), http-client-tls (>=0.3.5 && <0.4), http-types (>=0.12.3 && <0.13) [details]
License BSD-3-Clause
Copyright 2020 An Long
Author An Long
Maintainer aisk1988@gmail.com
Category Web
Home page https://github.com/aisk/request#readme
Source repo head: git clone https://github.com/aisk/request
Uploaded by asaka at 2021-05-01T18:02:06Z
Distributions NixOS:0.2.0.0
Downloads 319 total (319 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2021-05-01 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for request-0.2.1.0

[back to package description]

request

HTTP client for haskell, inpired by requests and http-dispatch.

Installation

This pacakge is published on hackage with the same name request, you can install it with cabal or stack or nix as any other hackage packages.

Usage

You can try this in haskell REPL once you have request installed:

import Network.HTTP.Request

resp <- get "https://api.leancloud.cn/1.1/date"
print $ requestStatus resp

Core API

Request's API has three core concepts: Request record type, Response record type, send function.

Request

Request is all about the information you will send to the target URL.

data Request = Request
  { requestMethod  :: Method
  , requestUrl     :: String
  , requestHeaders :: Headers
  , requestBody    :: Maybe Data.ByteString.ByteString
  } deriving (Show)

send

Once you have constructed your own Request record, you can call the send function to send it to the server. The send function's type is:

send :: Request -> IO Response

Response

Response is what you got from the server URL.

data Response = Response
  { responseStatus  :: Int
  , responseHeaders :: Headers
  , responseBody    :: Data.ByteString.ByteString
  } deriving (Show)

Example

:set -XOverloadedStrings

import Network.HTTP.Request

-- Construct a Request record.
let req = Request GET "https://api.leancloud.cn/1.1/date" [] Nothing
-- Send it.
res <- send req
-- access the fields on Response.
print $ requestStatus resp

Shortcuts

As you expected, there are some shortcuts for the most used scenarios.

get :: String -> IO Response
get url =
  send $ Request GET url [] Nothing

delete :: String -> IO Response
delete url =
  send $ Request DELETE url [] Nothing

post :: (String, Maybe Data.ByteString.ByteString) -> IO Response
post (url, body) =
  send $ Request POST url [] body

put :: (String, Maybe Data.ByteString.ByteString) -> IO Response
put (url, body) =
  send $ Request PUT url [] body

These shortcuts' definitions are simple and direct. You are encouraged to add your own if the built-in does not match your use cases, like add custom headers in every request.

API Documents

See the hackage page: http://hackage.haskell.org/package/request/docs/Network-HTTP-Request.html

About the Project

Request is © 2020-2021 by aisk.

License

Request is distributed by a BSD license.