C#HttpWebRequest-如何在不下载的情况下区分HTML和XML页面?
我需要知道链接(URL)是指向XML文件(RSS提要),还是指向普通HTML文件,只需查看标题,或者类似的内容(无需下载) 有什么好的建议吗?:) 谢谢! Roey只要在“文本”阅读器中阅读即可。 然后决定哪一个是最好的,例如,在脑海中寻找一些标签;) 然后把它扔进你真正的阅读器里C#HttpWebRequest-如何在不下载的情况下区分HTML和XML页面?,c#,html,xml,httpwebrequest,xmlreader,C#,Html,Xml,Httpwebrequest,Xmlreader,我需要知道链接(URL)是指向XML文件(RSS提要),还是指向普通HTML文件,只需查看标题,或者类似的内容(无需下载) 有什么好的建议吗?:) 谢谢! Roey只要在“文本”阅读器中阅读即可。 然后决定哪一个是最好的,例如,在脑海中寻找一些标签;) 然后把它扔进你真正的阅读器里 还是太简单了?您可以使用内容类型标题,为了节省带宽,您可以强制web服务器为您提供文档的指定部分。如果服务器在其响应中包含Accept Ranges:bytes头,则可以使用Range:bytes=0-10仅下载前十
还是太简单了?您可以使用
内容类型
标题,为了节省带宽,您可以强制web服务器为您提供文档的指定部分。如果服务器在其响应中包含Accept Ranges:bytes
头,则可以使用Range:bytes=0-10
仅下载前十个字节(甚至尝试不下载任何内容)
另外,研究
HEAD
动词而不是GET
仅仅通过查看URL,您无法找到它是什么文件类型
我建议您尝试检查您请求的文档的MIME类型,或者阅读第一行并希望作者已输入Doctype。您可以只执行HEAD请求,而不是完整的POST/GET 这将获得该页面的标题,其中应包括内容类型。 因此,您应该能够区分它是文本/html还是xml
在Eoin Campbell的回答之后,有一个很好的例子,下面是一个代码片段,它应该使用
System.Net
功能实现这一点:
using (var request = System.Net.HttpWebRequest.Create(
"http://tempuri.org/pathToFile"))
{
request.Method = "HEAD";
using (var response = request.GetResponse())
{
switch (response.ContentType)
{
case "text/xml":
// ...
break;
case "text/html":
// ...
break;
}
}
}
当然,这假设web服务器发布内容(MIME)类型,并且正确地发布。但是既然你说你想要一个带宽效率高的方法来做这件事,我想你不想下载所有的标记并分析它!老实说,内容类型通常在任何情况下都是正确设置的。检查HttpWebResponse对象中的标题。对于xml/RSS文档,内容类型标题应为text/xml;对于标准网页,内容类型标题应为text/html。一般来说,这是不可能的。这是因为可以(尽管没有帮助)将HTML或XML文件作为应用程序/八位字节流提供。另外,正如其他人所指出的,存在多个有效的XML mime类型。但是,头部请求和内容类型检查有时可能会起作用:
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
req.Method = "HEAD";
String contentType = resp.ContentType;
if(contentType == "text/xml")
getXML(url);
else if(contentType == "text/html")
getHTML(url);
但如果你想以某种方式处理它,你可以:
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
String contentType = resp.ContentType;
if(contentType == "text/xml")
processXML(resp.GetResponseStream());
else if(contentType == "text/html")
processHTML(resp.GetResponseStream());
else
// process error condition
请记住,文件是根据需要下载的。因此,仅仅请求响应对象并不会导致整个文件被下载。+1完美的答案和HEAD请求存在的确切原因只是一个小提示,一些服务器不支持HEAD,所以当它失败时,不要忘记返回GET/POST。我数了一个“可以”和两个“应该”。]的确它确实假设所讨论的Web服务器支持HTTP头请求&如果有的话,内容mimetype的设置是正确的,但我认为这些场景是规则的例外;这正好回答了一半的问题。有一些棘手的内容类型,比如:@bzlm:是的,但是它们真的被使用了吗?我们这里只讨论HTML和XML类型。他明确表示,在下载整个文件之前,他想知道。