【问题标题】:Haskell - response code of simpleHTTP methodHaskell - simpleHTTP 方法的响应代码
【发布时间】:2014-01-04 03:51:07
【问题描述】:

我编写了以下 Haskell 代码来下载雅虎财经网站上提供的 CSV 文件(每日价格)。在代码的最后一部分,有一个 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

【问题讨论】:

  • 我将您的代码复制到问题中以便于阅读。
  • 我没听懂……你的意思是,去哪里?
  • 我的意思是我从 URL 中复制了您的代码以嵌入问题中。
  • 现在才意识到:)谢谢:!

标签: url haskell csv


【解决方案1】:

线程化的Result a 类型是Either ConnError a 的别名。

如果HTTP 客户端库在连接到服务器时出现实际问题,您将获得Left 值。如果它成功连接到服务器并从服务器接收到 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)

我还添加了一个“包罗万象”的案例,以防您从服务器收到意外响应。

【讨论】:

  • 如果你不介意,你能把那部分添加到上面的代码中吗?问题是我在数据通信相关的事情上还不够好。而且,我添加了三个“正确”值.....r 他们好吗?我需要将它们更改为“左”值吗?
  • 那你的意思是说如果连接不上服务器就不会收到HTTP响应码……???这意味着,它必须类似于...... Right (5,,) -> ..... Left x -> .......
  • 非常感谢!!但是 HTTP 中还有其他两个代码可用(根据我上面发布的网页)。即 (1,,) 和 (3,,) 。这两个不是错误,而是分别是临时响应和重定向。那两个也会被“catch-all”抓住.....可以吗?
  • 如果您知道代码的含义并且可以通过自定义案例更好地处理它们,那么您应该添加一个。
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
相关资源
最近更新 更多