在.NET / C#中,我想验证一些HTML代码。例如,我有以下HTML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><title></title></head>
<body>
CDATA section number 1?
</body>
</html>
我有以下C#代码:
string htmlCode = ... // for instance the html above
var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD };
settings.ValidationEventHandler += delegate(object s, ValidationEventArgs e)
{
throw new XmlException(e.Message);
};
using (var srdr = new StringReader(htmlCode))
using (var xrdr = new XmlTextReader(srdr))
using (var vrdr = XmlReader.Create(xrdr, settings))
{
try
{
while (vrdr.Read()) { }
}
catch (XmlException ex)
{
// do some stuff
}
}
当我运行此代码时,我有这个例外:
System.Net.WebException:远程服务器返回错误:(403)禁止 在System.Net.HttpWebRequest.GetResponse()
我做了什么错了?在此先感谢您的帮助
答案 0 :(得分:2)
这不是你的代码。
http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic
您需要自己提供DTD,例如使用从本地资源返回DTD的自定义XmlResolver
。
答案 1 :(得分:1)
看起来您的代码正在尝试从中下载 http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
返回403(尝试在浏览器中打开它)
注意:Lucero的链接解释为为什么它返回403
答案 2 :(得分:0)
您获得的响应代码是一个HTTP代码,表明您禁止访问您尝试检索的资源。这可能有很多原因:
服务器设置 - 服务器可能禁止所有访问资源的尝试。要检查此情况,请尝试从浏览器访问它。如果您在浏览器中遇到相同的错误,则可能是您的问题是服务器配置。
已阻止的用户代理 - 有时只允许某些用户代理访问资源。这样做是为了防止自动网站抓取工具抓取资源中的信息。如果您访问的网站包含robots.txt文件,则可能会阻止您的程序。
需要身份验证 - 如果您要访问的服务器需要身份验证(例如基本身份验证或摘要身份验证),那么您需要提供凭据以及您的请求。同样,这可以通过浏览器进行检查。如果资源需要身份验证,则应在浏览器中弹出一个请求用户/密码信息的弹出窗口。
你可能有其他原因可以得到这个代码,但这些是我能想到的前三个。