为了继续执行dropbox query,我正在使用http-conduit尝试执行POST请求,但我不确定如何构造Manager对象。
这是我到目前为止得到的(以及有问题的一行):
data DropboxConfig = DropboxConfig { appKey :: String, appSecret :: String}
main = do
let appKey = "asdfasdfasdfs"
let appSecret = ";lkj;lkjlkjlkj"
let config = DropboxConfig {appKey = appKey, appSecret = appSecret}
let qs = buildQueryString config
let req = def {method = methodPost, queryString = qs}
resp <- http req (newManager) --!Does Not work
putStrLn $ unpack resp
buildQueryString :: DropboxConfig -> ByteString
buildQueryString config = pack $ "oauth_consumer_key="++(appKey config)++
"&oauth_signature_method=HMAC-SHA1"++
"&oauth_timestamp=137131200" ++
"&oauth_nonce=4572616e48616d6d65724c61686176" ++
"&oauth_signature=wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D下面是我得到的错误:
Couldn't match expected type `http-conduit-1.3.0.1:Network.HTTP.Conduit.Manager.Manager'
with actual type `http-conduit-1.3.0.1:Network.HTTP.Conduit.Manager.ManagerSettings
-> IO http-conduit-1.3.0.1:Network.HTTP.Conduit.Manager.Manager'发布于 2012-04-04 02:33:36
实际上,类型签名说明了一切:
newManager :: ManagerSettings -> IO Manager这是一个IO操作,因此您必须像往常一样使用<-绑定它。它还需要ManagerSettings,所以您需要提供它。我想应该是这样的(我不太熟悉这个库,只是遵循类型):
manager <- newManager def
resp <- http req manager不过,使用withManager可能是一个更好的主意,这样您就不必担心自己关闭它。
withManager $ \manager -> do
resp <- http req manager
...https://stackoverflow.com/questions/9999153
复制相似问题