【发布时间】:2015-03-26 13:35:57
【问题描述】:
我是编程新手,F# 是我的第一语言。我目前对 .NET API 还是很陌生。
作为一个初学者的项目,我想抓取一个网站。我想编写一个函数,给定一个特定的 URL,自动下载该页面上的所有 HTML 内容。但是,如果 URL 无效,而不是抛出 System.Net.WebException 消息,我想返回布尔输出“False”。
这是我的代码的相关部分:
let noSuchURL (url: string) =
let html = downloadHtmlFromUrl url
let regexPattern = @"<title>Page not found</title>"
let matchResult = Regex.IsMatch(html, regexPattern)
matchResult
(我已经在F#交互中测试了downloadHtmlFromUrl函数,效果很好。)
我意识到如果地址无效,上面的代码不会返回布尔值。相反,会引发 System.Net.WebException,并显示消息“System.Net.WebException:远程服务器返回错误:(404) Not Found”。
我可以进行哪些更改以获得布尔输出?
【问题讨论】:
-
A WebException(实际上是所有异常)都有一个描述问题所在的消息属性。那么,有什么问题呢? URL 是否有效、为空、不存在?
-
这是错误消息:“System.Net.WebException:远程服务器返回错误:(404) 未找到。”
-
你想做什么?无效地址会引发异常,因为服务器本身将返回 404 错误响应而不是网页。它不必返回体内的任何东西。要么捕获异常,要么更改 downloadHtmlFromUrl 的代码,以免出错。例如。使用 HttpClient 代替 WebClient 并检查响应状态码