[Haskell-cafe] Trying to write a very simple HTTP Client

Johan Tibell johan.tibell at gmail.com
Fri May 23 09:58:04 EDT 2008


On Fri, May 23, 2008 at 3:27 PM, Eric <eeoam at ukfsn.org> wrote:
> Hi all,
>
> I've written the following program to connect to a submit an HTTP GET
> request to a server and print the response:
>
> module Main where
>
> import Network
> import System.IO
>
> main = withSocketsDo go
>
> go = do putStrLn "Connecting..."
>           out <- connectTo "haskell.org" (PortNumber 80)
>           hPutStrLn out "GET /\r"
>           hPutStrLn out "Host: haskell.org\r"
>           hPutStrLn out "\r"
>           cs    <- hGetLine out
>           hClose out
>           print cs
>
> When I run the program, however, I get the following error:
>
> HTTPClient: <socket: 1872>: hGetLine: end of file
>
> Can anyone see what's wrong?

I think you need to either print cs before you close the socket or
make sure that cs is force (~computed) before you close the socket as
laziness makes it get evaluated when you call print cs rather than
when you call hGetLine. In other words, you try to read from the
socket after you've closed it.

Cheers,

Johan


More information about the Haskell-Cafe mailing list