https://github.com/aesiniath/http-streams
  
  
    Haskell HTTP client library for use with io-streams 
    https://github.com/aesiniath/http-streams
  
        Last synced: 7 months ago 
        JSON representation
    
Haskell HTTP client library for use with io-streams
- Host: GitHub
- URL: https://github.com/aesiniath/http-streams
- Owner: aesiniath
- License: bsd-3-clause
- Created: 2012-12-13T03:59:53.000Z (almost 13 years ago)
- Default Branch: main
- Last Pushed: 2023-10-20T05:41:32.000Z (about 2 years ago)
- Last Synced: 2024-05-10T11:32:40.473Z (over 1 year ago)
- Language: Haskell
- Homepage: https://hackage.haskell.org/package/http-streams
- Size: 748 KB
- Stars: 50
- Watchers: 3
- Forks: 48
- Open Issues: 19
- 
            Metadata Files:
            - Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
 
Awesome Lists containing this project
- awesome-http - http-streams - streams |   (Programming Languages / Haskell)
README
          An HTTP client
==============
An HTTP client library for Haskell using the Snap Framework's
[io-streams](https://hackage.haskell.org/package/io-streams) library to handle
the streaming IO.
A common case in writing RESTful web services is needing to make onward calls
to further servers. This package is intended to make this easy to do.
Though originally written for making calls from web apps written with
Snap, you can use this from any library or framework.
Enjoy!
Example
-------
The underlying API is very simple:
```haskell
main :: IO ()
main = do
    c <- openConnection "www.example.com" 80
    
    let q = buildRequest1 $ do
                http GET "/"
                setAccept "text/html"
    
    sendRequest c q emptyBody
    
    receiveResponse c (\p i -> do
    	putStr $ show p
    	x <- Streams.read i
    	S.putStr $ fromMaybe "" x)
    
    closeConnection c
```
There are also convenience functions for the common case of making
straight-forward GET and POST requests; for instance:
```haskell
    get "http://www.example.com/" (\_ i -> Streams.connect i stdout)
```
will _{ahem}_ stream the response body to stdout. Perhaps more
interesting (though less streams-oriented), is simply getting the
response as a ByteString using one of the pre-defined handlers:
```haskell
    x' <- get "https://secure.example.com/" concatHandler
```
See the documentation in
[Network.Http.Client](https://hackage.haskell.org/package/http-streams/docs/Network-Http-Client.html)
for further examples and details of usage of the API.