Conduit.simpleHttp - 执行随头文件和数据提供的请求

时间:2014-06-18 06:25:47

标签: python haskell networking

我有一个简单的应用程序,它发送HTTP(s)请求并打印返回的数据:

import Network.HTTP.Conduit (simpleHttp)

simpleHttp "http://example.com" >>= B.putStr

如何使用标头提供请求?或者更具体一点,我如何在Haskell中提出下面的请求(用Python编写)?

requests.post('https://some-url.com',data=json.dumps({"aaa":"BBBCCCDDD"}), headers={"content-type":"application/json"})

文档没有说明http://hackage.haskell.org/package/http-conduit-1.2.1/docs/Network-HTTP-Conduit.html

的任何内容

1 个答案:

答案 0 :(得分:1)

请注意Request的文档:

  

不公开此数据类型的构造函数。相反,你应该   使用def方法检索默认实例,或parseUrl   从URL构造,然后使用下面的记录来制作   修改

因此,您可以使用多个记录名称配置请求。在您的情况下,您需要requestHeadersrequestBody。这是一个例子:

{-# LANGUAGE OverloadedStrings #-}

import Data.Text (Text)
import qualified Data.Aeson as Aeson
import qualified Data.Map as Map
import Network.HTTP.Conduit

main :: IO ()
main = do
  request <- parseUrl "http://example.com"
  res <- withManager $ httpLbs $ configureRequest request
  print res
  where
  configureRequest r = r {
    method = methodPost,
    requestHeaders = ("content-type", "application/json") : requestHeaders r,
    requestBody = RequestBodyLBS (Aeson.encode $ Map.fromList [("aaa" :: Text, "BBBCCSDDD" :: Text)])
  }