Haskell - simpleHTTP方法的响应代码

时间:2014-01-02 19:13:21

标签: url haskell csv

我已经编写了以下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") 

https://support.google.com/webmasters/answer/40132?hl=en

1 个答案:

答案 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)

我还添加了一个“全能”案例,以防您收到服务器的意外回复。