[Haskell-beginners] Network.Curl POST body not showing up

Bryce Verdier bryceverdier at gmail.com
Wed May 11 18:49:29 CEST 2011


I would be interested in this as well. I'm trying to use Network.Curl 
for a personal project, also using a method_post, and am not able to get 
a response. Though I know it's connecting.

I _think_ that I need to use CurlWriteFunction, but I'm still new to 
Haskell & not sure how to work with that option.

Bryce


On 05/10/2011 10:25 PM, Michael Xavier wrote:
> Hi all,
>
> I was hoping one of you was pretty proficient with Network.Curl to 
> help me out, as I am not. I need to post JSON to an HTTPS endpoint 
> using HTTP Basic Authentication. The endpoint will not accept the 
> request unless the content-type is set to application/json.
>
> If I were using the curl utility, I'd do something like
>
> curl -H "Content-Type: application/json" -d "{blah:42}" -u 
> 'myuser:mypass' https://example.com/api.json
>
> I'd really like to use curl's curlGetString because the return type is 
> perfect, the code and the body.
>
> I've tried curlGetString, curlPost and curlMultiPost and all 
> combinations of CurlOption, but I can either get it to send the 
> correct content type header with empty content or send the post body 
> with the content type defaulted to urlencoded or multipart/form-data. 
> My code right now looks something like:
>
> doPost :: (ToJSON a) => T.Text -> T.Text -> T.Text -> a -> CampfireM 
> (CurlCode, String)
> doPost key sub path pay = liftIO $ curlGetString (url path sub) opts
>                      where opts    = method_POST ++ curlOpts key ++ 
> [CurlVerbose True, post, ct]
>                            post    = CurlPostFields [T.unpack encPay]
>                            ct      = CurlHttpHeaders ["Content-Type: 
> application/json"]
>                            encPath = encodePath path encPay
>                            encPay  = encodePayload pay
>
> The post fields will not be in the form of "key=value", but rather a 
> JSCODE:
>
> * Server auth using Basic with user 'SECRET_KEY'
> > POST /rooms/287132/speak.json HTTP/1.1
> Authorization: Basic SECRET_KEY
> Host: example.com <http://example.com>
> Accept: */*
> Content-Type: application/json
> Content-Length: 103
>
> * The requested URL returned error: 500
> * Closing connection #0
> * HTTP response code said error
>
> It would seem to me from this output that no actual content was sent. 
> What am I doing wrong? I'd really like to use curlGetString instead of 
> some of the more complex curl functions.
>
> Thanks!
>
> -- 
> Michael Xavier
> http://www.michaelxavier.net
>
>
> -- 
> Michael Xavier
> http://www.michaelxavier.net
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20110511/3b2aff0a/attachment.htm>


More information about the Beginners mailing list