我正在尝试下载 html 文件中包含的所有 png 文件。
不过,我在捕获 404 状态异常时遇到了麻烦,相反,我的程序只是崩溃了。
这是一些示例来演示:
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L
main = do
let badUrl = "http://www.google.com/intl/en_com/images/srpr/WRONG.png"
imgData <- (simpleHttp badUrl) `catch` statusExceptionHandler
L.writeFile "my.png" imgData
statusExceptionHandler :: t -> IO L.ByteString
statusExceptionHandler e = (putStrLn "oops") >> (return L.empty)
我的“哎呀”消息永远不会打印,而是应用程序崩溃并显示:
StatusCodeException(状态{statusCode = 404,statusMessage =“未找到”})[(“Content-Type”,“text/html;charset = UTF-8”),(“X-Content-Type-Options”,“nosniff "),("日期","2012 年 1 月 27 日星期五 03:10:34 GMT"),("服务器","sffe"),("内容长度","964"),("X-XSS -保护","1;模式=阻止")]
我究竟做错了什么?
Update:
按照 Thoma 的建议,我将代码更改为以下代码片段,现在已经有了适当的异常处理。
main = do
let badUrl = "http://www.google.com/intl/en_com/images/srpr/WRONG.png"
imgData <- (simpleHttp badUrl) `X.catch` statusExceptionHandler
case imgData of x | x == L.empty -> return ()
| otherwise -> L.writeFile "my.png" imgData
statusExceptionHandler :: HttpException -> IO L.ByteString
statusExceptionHandler (StatusCodeException status headers) =
putStr "An error occured during download: "
>> (putStrLn $ show status)
>> (return L.empty)
除了托马斯的回答之外,你还可以看出http-conduit
不要通过覆盖来抛出异常checkStatus
你的记录Request
type.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)