Thanks, looks ready for applying. Have you tested on windows?
Using proxy without libcurl
---------------------------
Chris Trompette <chris@trompette.name>**20110331181219
hunk ./src/HTTP.hs 9
[…]
hunk ./src/HTTP.hs 11
> +import Network.Browser ( browse, request, setCheckForProxy,
setErrHandler, setOutHandler )
> import Network.URI
We now need Network.Browser, in http.
hunk ./src/HTTP.hs 13
[…]
hunk ./src/HTTP.hs 48
> fetchUrl url = case parseURI url of
> Nothing -> fail $ "Invalid URI: " ++ url
> Just uri -> do debugMessage $ "Fetching over HTTP: "++url
> - proxy <- getProxy
> - when (not $ null proxy) $
> - debugFail "No proxy support for HTTP package
yet (try libcurl)!"
ok
> - resp <- simpleHTTP $ Request { rqURI = uri,
> - rqMethod = GET,
> - rqHeaders = headers,
> - rqBody = "" }
> + resp <- catch (browse $ do
> + setCheckForProxy True
> + setOutHandler debugMessage
> + setErrHandler debugMessage
> + request Request { rqURI = uri,
> + rqMethod = GET,
> + rqHeaders = headers,
> + rqBody = "" })
> + (\err -> debugFail $ show err)
> case resp of
browse is responsible for dealing with the proxy.
hunk ./src/HTTP.hs 58
> - Right res@Response { rspCode = (2,0,0) } ->
return (rspBody res)
> - Right Response { rspCode = (x,y,z) } ->
> + (_, res@Response { rspCode = (2,0,0) }) ->
return (rspBody res)
> + (_, Response { rspCode = (x,y,z) }) ->
> debugFail $ "HTTP " ++ show x ++ show y ++
show z ++ " error getting " ++ show uri
hunk ./src/HTTP.hs 61
> - Left err -> debugFail $ show err
>
> postUrl url body mime = case parseURI url of
> Nothing -> fail $ "Invalid URI: " ++ url
Ok
hunk ./src/HTTP.hs 65
> Just uri -> do debugMessage $ "Posting to HTTP: "++url
> - proxy <- getProxy
> - when (not $ null proxy) $
> - debugFail "No proxy support for HTTP package yet
(try libcurl)!"
> - resp <- simpleHTTP $ Request { rqURI = uri,
> - rqMethod = POST,
> - rqHeaders = headers
++ [Header HdrContentType mime,
> -
Header HdrAccept "text/plain",
> -
Header HdrContentLength
> -
(show $ length body) ],
> - rqBody = body }
> + resp <- catch (browse $ do
> + setCheckForProxy True
> + setOutHandler debugMessage
> + setErrHandler debugMessage
> + request Request { rqURI = uri,
> + rqMethod = POST,
> + rqHeaders = headers ++ [Header
HdrContentType mime,
> + Header
HdrAccept "text/plain",
> + Header
HdrContentLength
> +
(show $ length body) ],
> + rqBody = body })
> + (\err -> debugFail $ show err)
> case resp of
hunk ./src/HTTP.hs 78
> - Right res@Response { rspCode = (2,y,z) } -> do
> + (_, res@Response { rspCode = (2,y,z) }) -> do
> putStrLn $ "Success 2" ++ show y ++ show z
> putStrLn (rspBody res)
> return ()
hunk ./src/HTTP.hs 82
> - Right res@Response { rspCode = (x,y,z) } -> do
> + (_, res@Response { rspCode = (x,y,z) }) -> do
> putStrLn $ rspBody res
> debugFail $ "HTTP " ++ show x ++ show y ++
show z ++ " error posting to " ++ show uri
Likewise
hunk ./src/HTTP.hs 85
> - Left err -> debugFail $ show err
>
> requestedUrl :: IORef (String, FilePath)
> requestedUrl = unsafePerformIO $ newIORef ("", "")
hunk ./src/HTTP.hs 108
> return (u, e, ce)
> where h = return . ioeGetErrorString
>
> -getProxy :: IO String
> -getProxy =
> - getEnv "http_proxy"
> - `catch` \_ -> getEnv "HTTP_PROXY"
> - `catch` \_ -> return ""
> #else
>
> fetchUrl _ = debugFail "Network.HTTP does not exist"
ok
|