我使用http-conduit
库版本2.0+从HTTP Web服务获取内容:
import Network.HTTP.Conduit
main = do content <- simpleHttp "http://stackoverflow.com"
print $ content
如docs中所述,默认超时为5秒。
注意:这个问题已由我立即回答,因此有意不作进一步的研究。
类似于上一个问题,您不能一个人做到这一点simpleHttp
。您需要将和Manager
一起使用httpLbs
才能设置超时时间。
请注意,您无需在管理器中设置超时,但可以为每个请求分别设置超时。
这是一个完整的示例,其行为类似于您的上述功能,但允许您修改超时:
import Network.HTTP.Conduit
import Control.Monad (liftM)
import qualified Data.ByteString.Lazy.Char8 as LB
-- | A simpleHttp alternative that allows to specify the timeout
-- | Note that the timeout parameter is in microseconds!
downloadHttpTimeout :: Manager -> String -> Int -> IO LB.ByteString
downloadHttpTimeout manager url timeout = do req <- parseUrl url
let req' = req {responseTimeout = Just timeout}
liftM responseBody $ httpLbs req' manager
main = do manager <- newManager conduitManagerSettings
let timeout = 15000000 -- Microseconds --> 15 secs
content <- downloadHttpTimeout manager "http://stackoverflow.com" timeout
print $ content
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句