简体   繁体   English

获取Haskell中网页的状态代码

[英]Get the status code of a webpage in Haskell

I'm trying to find a way to check if a webpage exists in Haskell. 我正试图找到一种方法来检查Haskell中是否存在网页。 The server is HTTP2 / HTTPS only and I'm trying to check if the page exists in a servant application. 服务器只是HTTP2 / HTTPS,我正在尝试检查该服务器应用程序中是否存在该页面。

Is there any Haskell packages with good documentation to just check if the status code is 200 or 404? 是否有任何Haskell软件包具有良好的文档来检查状态代码是200还是404? And working with strong HTTPS and HTTP2 servers? 使用强大的HTTPS和HTTP2服务器?

Here what I currently have with http-conduit but I'm receiving weird exceptions (TlsExceptionHostPort (HandshakeFailed (Error_Protocol ("expecting server hello, got alert : [(AlertLevel_Fatal,HandshakeFailure)]",True,HandshakeFailure))) "thibaud.dauce.fr" 443 and StatusCodeException). 这里我目前有什么与http-conduit,但我收到了奇怪的例外(TlsExceptionHostPort(HandshakeFailed(Error_Protocol(“期待服务器问候,得到警报:[(AlertLevel_Fatal,HandshakeFailure)]”,True,HandshakeFailure)))“thibaud.dauce .fr“443和StatusCodeException)。

... other imports
import qualified Network.HTTP.Conduit as HTTP

... other types
type AppM = ReaderT Config (EitherT ServantErr IO)

newComment :: String -> OneComment -> AppM Int64
newComment baseUrl oneComment = do
    time <- liftIO getCurrentTime
    response <- HTTP.withManager $ \manager -> do
        request <- HTTP.parseUrl $ url oneComment
        HTTP.httpLbs request manager
    case (statusIsSuccessful $ HTTP.responseStatus response, startswith baseUrl (url oneComment)) of
        (_, False) -> return 0
        (True, True) -> do
            theNewComment <- runDb $ insert $ Comment (url oneComment) (content oneComment) time
            return $ fromSqlKey theNewComment
        _ -> return 0

Some examples using wreq 一些使用wreq例子

{-# LANGUAGE OverloadedStrings #-}

import Network.Wreq
import Control.Lens
import Control.Exception as E
import Network.HTTP.Client (HttpException)

test1 = do
  r <- get "https://httpbin.org/get"
  print $ r ^. responseStatus . statusCode

-- throws an exception
test2 = do
  r <- get "https://www.google123123.com"
  print $ r ^. responseStatus . statusCode

testUrl url = do
  r <- get url
  return $ r ^. responseStatus . statusCode

-- catching the exception
test3 = do
  st <- testUrl "https://www.google123123123.com"  `E.catch` handler
  print st
  where
    handler :: HttpException -> IO Int
    handler _ = return 999

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM