簡體   English   中英

如何在http-conduit中構造Manager對象?

[英]How to construct Manager object in http-conduit?

繼續執行dropbox查詢我正在使用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'

類型簽名說明了一切,真的:

newManager :: ManagerSettings -> IO Manager

這是一個IO動作,所以你必須使用<-一如既往地綁定它。 它還需要ManagerSettings ,因此您需要提供它。 這樣的事情應該這樣做,我認為(不太熟悉圖書館,只是遵循類型):

manager <- newManager def
resp <- http req manager

但是,使用withManager可能是一個更好的主意,因此您不必擔心自己關閉它。

withManager $ \manager -> do
  resp <- http req manager
  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM