Wreqのget
メソッドを使用して404に実行すると、処理するstatusCodeではなく例外(下を参照)が表示されます。返されるのはわずか200秒です。Wreq:例外をスローする404sを停止します
tutorialのエラー処理コードに従ってみましたが、get u
と同じタイプを返す方法が見つかりません。さらに、これは私がこのインスタンスで必要とする以上に複雑なようです。
どのように私は単に例外を防ぐことができ、ちょうどここで
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
スローされた例外で、あなたはそれが私がYurasが提案
*Main> re <- get "https://www.seatme.nl/restaurant/1371/Londen.htm"
*** Exception: StatusCodeException (Status {statusCode = 404, statusMessage = "Not Found"}) [("Cache-Control","private"),....
をしたいstateCodeを持って見ることができているようresponseStatusを返しますオプションを使用していますが、params
を使用して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
で動作するようにこれを得たが、問題はWreqがExceptionとして '200'以外のものを扱っているので、無効にしなければならないということです。 –
@ SimonH私は例を追加しました – Yuras
ありがとう、また中置演算子を使用しないことに感謝します –