darcs patch: Fallback onto simpleHTTP when Network.Browser fails
Stephen Hicks
sdh33 at cornell.edu
Sat Oct 11 14:51:34 EDT 2008
On Sat, Oct 11, 2008 at 1:51 PM, Duncan Coutts
<duncan.coutts at worc.ox.ac.uk> 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 <sdh33 at cornell.edu>
Date: Sat, Oct 11, 2008 at 11:40 AM
Subject: Bug with Network.Browser
To: bjorn at 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 at 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===
More information about the cabal-devel
mailing list