【发布时间】:2017-07-02 02:11:30
【问题描述】:
问题:我正在尝试将一些 JSON 发布到一个只接受 Base64 编码的 HTTP 端点。
代码示例:这是一个成功发布没有 Base64 编码的代码示例:
{-# LANGUAGE OverloadedStrings #-}
module Lib where
import Data.Aeson (encode, object, (.=))
import qualified Data.ByteString.Lazy.Char8 as L8
import Network.HTTP.Client
import Network.HTTP.Client.TLS
import Network.HTTP.Types.Status (statusCode)
import qualified Data.ByteString.Base64 as B64
postJSON :: IO ()
postJSON = do
manager <- newManager tlsManagerSettings
-- Nested JSON object to POST:
let requestObject = object
[ "event" .= ("App launched." :: String)
, "properties" .= object [ "distinct_id" .= ("user" :: String)
, "token" .= ("f793bae9548d8e123cef251fd81df487" :: String)
]
]
initialRequest <- parseRequest "http://api.mixpanel.com/track"
let request = initialRequest
{ method = "POST"
, requestBody = RequestBodyLBS $ encode requestObject
, requestHeaders =
[ ("Content-Type", "application/json; charset=utf-8")
]
}
response <- httpLbs request manager
putStrLn $ "The status code was: "
++ show (statusCode $ responseStatus response)
L8.putStrLn $ responseBody response
尝试:为了将 JSON 作为 Base64 编码发送,我尝试将 requestBody = RequestBodyLBS $ encode requestObject 替换为 requestBody = RequestBodyLBS $ Data.Bytestring.Base64.encode (encode requestObject),但出现类型错误。那么对于这个 HTTP POST,我该如何将 JSON 编码为 Base64 呢?
【问题讨论】: