On Sat, Oct 11, 2008 at 1:51 PM, Duncan Coutts
wrote:
Thanks for looking into this Stephen. Do you have the details on the bug
in Network.Browser? We can get that fixed. The current maintainer is
happy for us to fix stuff if it's clear what needs to be done. I'd much
rather do that than switch to the simpleHTTP which does not support
redirects or proxies, both of which we need.
I'll forward the email I sent to Bjorn. The patch I submitted to
cabal install still attempts to use the redirects and proxies - it
only changes behavior in the case of failure. I couldn't make heads
or tails of the Browser module, other than the fact that it doesn't
seem to work for me.
---------- Forwarded message ----------
From: Stephen Hicks
Date: Sat, Oct 11, 2008 at 11:40 AM
Subject: Bug with Network.Browser
To: bjorn@bringert.net
Hi,
I've been experiencing problems with cabal update - particularly that
whenever I'm behind NAT, I always get the error
recv: resource vanished (Connection reset by peer)
I tracked this bug down to the use of (browse . request) in Cabal's
source. Replacing it with Network.HTTP.simpleHTTP (with appropriate
transformations to the output) fixes the problem. But this sounds to
me like a bug in Network.Browser, so I'm reporting it to you.
I'm attaching at the bottom of this message a simple example. Here's
the output I get from behind a NAT router:
===BEGIN OUTPUT===
simpleHTTP: success
Sending:
GET http://www.google.com/ HTTP/1.1
Creating new connection to www.google.com
browser: failure: recv: resource vanished (Connection reset by peer)
===END OUTPUT===
The same error arises from the example found on
http://homepages.paradise.net.nz/warrickg/haskell/http/#browser,
though I didn't fully understand it, so I constructed my own example.
Regards,
steve hicks
sdh33@cornell.edu
===BEGIN CODE===
import Network.URI
import Network.HTTP
import Network.Browser
import Data.Maybe (fromJust)
req = Request{ rqURI = fromJust $ parseURI "http://www.google.com/",
rqMethod = GET,
rqHeaders = [],
rqBody = "" }
main1 = simpleHTTP req
main2 = browse $ request req
try s f = catch (f >>= (\x -> seq x $ putStrLn $ s++": success"))
(\e -> putStrLn $ s++": failure: "++show e)
main = try "simpleHTTP" main1 >> try "browser" main2
===END CODE===