HTTP-Simple 0.1 → 0.2
raw patch · 2 files changed
+6/−135 lines, 2 files
Files
- HTTP-Simple.cabal +6/−6
- Network/HTTP/Simple.hs +0/−129
HTTP-Simple.cabal view
@@ -1,14 +1,14 @@ Name: HTTP-Simple-Version: 0.1-Description: Enable simple wrappers to Network.HTTP-Synopsis: Enable simple wrappers to Network.HTTP+Version: 0.2+Description: DEPRECATED Enable simple wrappers to Network.HTTP+Synopsis: DEPRECATED Enable simple wrappers to Network.HTTP Category: Network-Stability: experimental+Stability: Deprecated Homepage: http://www.b7j0c.org/content/haskell-http.html License: BSD3 License-file: LICENSE Author: brad clawsie Maintainer: haskell@fastmail.fm Build-Depends: base, network, HTTP-Exposed-modules: Network.HTTP.Simple-ghc-options: -O+Exposed-modules: +Build-Type: Simple
− Network/HTTP/Simple.hs
@@ -1,129 +0,0 @@-{- | Network.HTTP.Simple-- This module exports the methods 'httpHead' and 'httpGet' and the- Int value 'redirectDepth'.-- The goal of this module is to provide a very simple interface to http- head and get functionality utilizing the more detailed functions- of the Network.HTTP module. There are efforts in place to improve- Network.HTTP, and if those efforts bear fruit, you should likely seek- functionality there instead of this module. This module may even be broken- under a future revision to Network.HTTP. - - Because the goal of this module is to be simple, no attempt at cascading- various error states to the caller is made at all. If the function fails- for any reason, Nothing is returned. If you actually want to capture error- states, you should be using Network.HTTP directly.--- Here is a small complete haskell program illustrating this library:--@- module Main where- import Network.URI- import Network.HTTP- import Network.HTTP.Simple- main = do- let s = \"http:\/\/www.yahoo.com\/\"- case parseURI s of- Nothing -> error \"parse uri error\"- Just uri -> do- -- first get headers - tryHead <- httpHead uri- case tryHead of- Nothing -> error \"head error\"- Just headers -> print headers- -- now try getting content- tryGet <- httpGet uri- case tryGet of- Nothing -> error \"get error\"- Just content -> print content- return ()-@--}-module Network.HTTP.Simple (httpHead,httpGet,redirectDepth) where-import Data.Char (intToDigit)-import Network.URI-import Network.HTTP--{- - License info:-- This module draws heavily on http://darcs.haskell.org/http/test/get.hs,- which is distributed with the Network.HTTP library- - Since the code for Network.HTTP is based on the same BSD3 license as this- code, I do not believe I am violating the license used by it. I have- place appropriate references to the original contributors in my own- license file. please let me know if I have not attributed the original- authors correctly. It is my intent to honor their licensing wishes.-- The license is a simple BSD3-style license available here:- - http://www.b7j0c.org/content/network-http-simple-license.txt---}---- | The 'handleEresp' function returns the valid http response code--- from the simpleHTTP function, or Nothing in the case of a failure.-handleEresp :: Either ConnError a -> Maybe a-handleEresp (Left e) = Nothing-handleEresp (Right v) = Just v---- | redirectDepth stipulates the number of http redirects we will allow--- for any given request, defaulted to 10. -redirectDepth :: Int-redirectDepth = 10---- | Given a http response Header list, the 'getHeaderVal' function will --- find the value for a given field, or return Nothing-getHeaderVal :: HeaderName -> [Header] -> Maybe String-getHeaderVal h (Header k v:hs) = - if (h == k) then Just v else getHeaderVal h hs -getHeaderVal h [] = Nothing---- | The 'request' function will build a http Request record given --- a uri and a method-request :: RequestMethod -> URI -> Request-request method uri = Request{ rqURI = uri,- rqMethod = method,- rqHeaders = [],- rqBody = "" }---- | The 'httpHead' function will return a list of Headers for a given --- request. Should the request fail for any reason, Nothing is returned.-httpHead :: URI -> IO (Maybe [Header])-httpHead uri = do- eresp <- simpleHTTP (request HEAD uri)- case (handleEresp eresp) of- Nothing -> return Nothing- Just resp -> return (Just (rspHeaders resp))---- | The 'httpGet' function will return the http response content for a given --- request. Should the request fail for any reason, Nothing is returned.--- This function simply calls the function httpGetN with a seed value of 0--- to indicate an initial redirect depth level.-httpGet :: URI -> IO (Maybe String)-httpGet uri = httpGetN 0 uri---- | The httpGetN function attempts to resolve a given uri to an http--- 200-class response with content. This function will traverse redirects--- to a depth of 'redirectDepth'. Nothing is returned in the case of any--- failure or error.-httpGetN :: Int -> URI -> IO (Maybe String)-httpGetN d uri = do- eresp <- simpleHTTP (request GET uri)- case (handleEresp eresp) of- Nothing -> return Nothing -- no response- Just resp -> case rspCode resp of- (2,0,0) -> return (Just (rspBody resp)) -- the target content- (3,0,2) -> do- case (d >= redirectDepth) of- True -> return Nothing -- too many redirects- False -> case getHeaderVal HdrLocation (rspHeaders resp) of- Nothing -> return Nothing -- bad redirect headers- Just rawRedirect ->- case parseURI rawRedirect of- Nothing -> return Nothing -- bad uri- Just redirectURI -> httpGetN (d+1) redirectURI- _ -> return Nothing -- unsupported http response