我已经编写了以下Haskell代码来下载雅虎财经网站上提供的CSV文件(daliy价格)。在代码的最后部分,有一个case语句。我想知道实际上“rcode”何时包含“Left”值。我已经提到过三种情况,但它们都是指“正确”的值。我可能错了。我指的是以下网站上提供的HTTP响应代码。
downloadCSVFile ::String-> IO (Bool,String)
downloadCSVFile company_code=do
let a="http://ichart.finance.yahoo.com/table.csv?s=" ++ company_code
let b=simpleHTTP $ getRequest a
src <- ( b >>= getResponseBody)
rcode <- fmap rspCode <$> b
case rcode of
Right (2,_,_) -> return (True,src)
Right (4,_,_) -> return (False,"Invalid URL..")
Right (5,_,_) -> return (False, "Server Error")
答案 0 :(得分:1)
获取线索的Result a
类型是Either ConnError a
的别名。
如果Left
客户端库在连接到服务器时遇到一些实际问题,您将获得HTTP
值。如果它成功连接到服务器并从服务器收到HTTP响应代码,则该值始终为Right
。
有关详细信息,请参阅Network.HTTP documentation。
要处理错误情况,请执行以下操作:
case rcode of
Left err -> return (False, "Connection error: " ++ show err)
Right (2,_,_) -> return (True,src)
Right (4,_,_) -> return (False,"Invalid URL..")
Right (5,_,_) -> return (False, "Server Error")
Right code -> return (False, "Unexpected code: " ++ show code)
我还添加了一个“全能”案例,以防您收到服务器的意外回复。