[Haskell-cafe] Libraries for Commercial Users

Erik de Castro Lopo mle+hs at mega-nerd.com
Wed Oct 7 22:02:34 EDT 2009

Don Stewart wrote:

> > A version of Network.HTTP that accepts HTTPS URLs and does the right
> > thing instead of attempting to do a HTTP connection instead.
> Yeah, we use the curl library for all our HTTPS stuff.

Well there is a big difference between Network.Curl and Network.HTTP.
HTTP is really easy to understand and use, while Curl is not.

What I would like to do is a POST operation to a HTTPS server with
Content-Type "text/xml" and then get the HTTP response code as well
as the body which is also "text/xml". This should be easy and should
be obvious, but unfortunately does not even seem to be supported by

The Network.Curl API is rather weird. It has a very sensible and
obvious GET function:

    curlGetString :: URLString -> [CurlOption] -> IO (CurlCode, String)

but no corresponding POST function. Instead it has:

    curlPost :: URLString -> [String] -> IO ()
    curlMultiPost :: URLString -> [CurlOption] -> [HttpPost] -> IO ()

both of which seem to only support x-www-form-urlencoded data and not
text/xml. Furthermore, whats with the 'IO ()' result? Wouldn't it make
more sense to return 'IO (CurlCode, String)' like curlGetString?

I don't like to be critical of other people's projects, but Network.Curl
seems to be one huge ball of confusion.

Erik de Castro Lopo

More information about the Haskell-Cafe mailing list