Tôi đang cố gắng kiểm tra các liên kết bị hỏng nhưng khi tôi sử dụng phương thức get
của Wreq và chạy vào 404, tôi nhận được ngoại lệ (xem dưới) thay vì mã trạng thái để xử lý. Chỉ có 200s dường như được trả lại.Wreq: Dừng 404s ném ngoại lệ
Tôi đã cố gắng làm theo mã xử lý lỗi trong tutorial nhưng tôi không thể tìm cách trả về cùng một loại như get u
. Hơn nữa, điều này có vẻ phức tạp hơn tôi cần trong trường hợp này.
Làm thế nào tôi có thể chỉ đơn giản là ngăn chặn sự ngoại lệ và chỉ trả lại responseStatus như là
verifySeatme :: Maybe URL -> IO UrlStatus
verifySeatme url = do
case url of
Nothing -> return None
Just "" -> return None
Just u -> do
seatmeResp <- get u --`E.catch` handler
-- r ^? responseBody . key "url"
-- could also check for redirect to errorPage.aspx
if seatmeResp ^. W.responseStatus . statusCode == 200
then return (Working u)
else return Broken
where
handler [email protected](StatusCodeException s respHeaders _) =
do
return respHeaders
Dưới đây là ngoại lệ ném ra, và bạn có thể thấy nó có stateCode tôi muốn
*Main> re <- get "https://www.seatme.nl/restaurant/1371/Londen.htm"
*** Exception: StatusCodeException (Status {statusCode = 404, statusMessage = "Not Found"}) [("Cache-Control","private"),....
Yuras gợi ý sử dụng các tùy chọn, nhưng tôi không thể làm việc từ ví dụ này bằng cách sử dụng params
cho một người sử dụng checkStatus :: Lens' Options (Maybe StatusChecker)
:
getData :: IO Restos
getData = do
let opts = defaults & customStatusHandler
jdata <- asJSON =<< getWith opts "http://localhost/restos-short.json" :: IO Resp
let
restos = jdata ^. W.responseBody
verified <- mapM processEntry restos
return verified
-- type StatusChecker = Status -> ResponseHeaders -> CookieJar -> Maybe SomeException
customStatusHandler :: W.StatusChecker
customStatusHandler st res _ =
Just res
Tôi không đủ kinh nghiệm để có được tất cả những gì bạn có nghĩa là ở đây, nhưng vấn đề là Wreq đang xử lý bất kỳ điều gì khác ngoài '200' làm Ngoại lệ và tôi cần phải tắt số –
@SimonH tôi đã thêm một ví dụ – Yuras
Cảm ơn và cảm ơn bạn vì không sử dụng toán tử infix –