我有一个简单的应用程序,它发送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
的任何内容答案 0 :(得分:1)
请注意Request
的文档:
不公开此数据类型的构造函数。相反,你应该 使用def方法检索默认实例,或
parseUrl
从URL构造,然后使用下面的记录来制作 修改强>
因此,您可以使用多个记录名称配置请求。在您的情况下,您需要requestHeaders
和requestBody
。这是一个例子:
{-# 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)])
}