首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F#:System.Net.WebException

F#:System.Net.WebException
EN

Stack Overflow用户
提问于 2015-03-26 13:35:57
回答 1查看 331关注 0票数 1

我对编程很陌生,F#是我的第一语言。目前,我仍然非常不熟悉.NET API。

作为一个初学者的项目,我想刮一个网站。我想编写一个函数,给定一个特定的URL,自动下载该页面上的所有HTML内容。但是,如果URL无效,而不是抛出一条System.Net.WebException消息,我希望返回布尔输出"False“。

下面是我代码的相关部分:

代码语言:javascript
复制
let noSuchURL (url: string) =
    let html = downloadHtmlFromUrl url
    let regexPattern = @"<title>Page not found</title>"
    let matchResult = Regex.IsMatch(html, regexPattern)
    matchResult

(我已经在downloadHtmlFromUrl交互中测试了F#函数,它工作得很好。)

我意识到,在地址无效的情况下,上面的代码不会返回布尔值。相反,抛出System.Net.WebException,并带有消息"System.Net.WebException:远程服务器返回一个错误:(404)未找到“。

为了获得布尔输出,我可以做什么更改?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-26 13:49:31

也许能抓住例外?

代码语言:javascript
复制
let noSuchURL (url: string) =
  try
    let html = downloadHtmlFromUrl url
    let regexPattern = @"<title>Page not found</title>"
    let matchResult = Regex.IsMatch(html, regexPattern)
    matchResult
  with :? System.Net.WebException -> false

请注意:如果存在false,则该程序将返回WebException,无论该异常是出于什么原因引发的。如果您希望在404响应上具体返回false,则必须仔细查看WebException

代码语言:javascript
复制
let noSuchURL (url: string) =
  try
    let html = downloadHtmlFromUrl url
    let regexPattern = @"<title>Page not found</title>"
    let matchResult = Regex.IsMatch(html, regexPattern)
    matchResult
  with 
    :? System.Net.WebException as e 
       when e.Status = WebExceptionStatus.ProtocolError ||
            e.Status = WebExceptionStatus.NameResolutionFailure
       -> false

有关F#中异常的更多信息,请查看https://msdn.microsoft.com/en-us/library/dd233194.aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29279885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档