के सरल एचटीपी द्वारा फेंकने वाले 404 स्टेटस अपवाद को कैसे पकड़ सकता हूं, मैं एक HTML फ़ाइल में निहित सभी पीएनजी फ़ाइलों को डाउनलोड करने का प्रयास कर रहा हूं। मुझे 404 स्टेटस अपवादों को पकड़ने में परेशानी है, इसके बजाय मेरा प्रोग्राम बस दुर्घटनाग्रस्त हो जाता है।मैं Http.Conduit
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)
मेरे "oops" संदेश कभी नहीं प्रिंट, बजाय अनुप्रयोग के साथ दुर्घटनाओं:
कुछ नमूने यहां प्रदर्शित करने के लिए है
StatusCodeException (स्थिति {statusCode = 404, statusMessage = "नहीं मिला "}) [(" सामग्री-प्रकार "," पाठ/एचटीएमएल; वर्णसेट = यूटीएफ -8 "), (" एक्स-कंटेंट-टाइप-ऑप्शन "," नोस्निफ "), (" तिथि "," शुक्र, 27 जनवरी 2012 03:10:34 जीएमटी "), (" सर्वर "," एसएफएफ "), (" सामग्री-लंबाई "," 9 64 "), (" एक्स-एक्सएसएस-प्रोटेक्शन "," 1; मोड = ब्लॉक ")]
मैं क्या गलत कर रहा हूँ?
अद्यतन:
थोमा की सलाह के बाद, मैं निम्नलिखित स्निपेट के लिए अपने कोड बदल गया है और अब जगह में उचित अपवाद संचालन की है।
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)
धन्यवाद, जिसने मेरी समस्या हल की। मैं केवल विशिष्ट अपवादों को पकड़ने के साथ सहमत हूं (यह मेरा अगला कदम था, मैं अभी वहां कभी नहीं मिला)। –