我想获取网址的类型。例如,这是一个 Html 页面,它的页面类型是text/html
但是this的类型是text/xml
。此页面的类型似乎是,image/png
但它是text/html
.
我想知道如何检测这样的网址的内容类型?
它应该是这样的
var request = HttpWebRequest.Create("http://www.google.com") as HttpWebRequest;
if (request != null)
{
var response = request.GetResponse() as HttpWebResponse;
string contentType = "";
if (response != null)
contentType = response.ContentType;
}
阅读 HTTP 标头。
HTTP 标头会告诉您内容类型。例如:
内容类型:应用程序/xml。
有两种方法来确定内容类型
第一个是微软在过去有点推广的,不再是一个好的做法。
如果客户端具有仅接受某些内容类型的显示约束,它将向服务器请求标头,例如
accept: application/json
accept: text/html
accept: application/xml
然后,如果服务器可以提供其中一个并选择 XML,它将返回带有标题的内容
content-type: application/xml.
但是,某些服务包括更多信息,例如
content-type: application/xml; charset=utf-8
而不是使用自己的标头进行字符编码。
HTTP 响应标头:content-type
如需更详细的回复,请提供更详细的问题。
您可以Content-Type
通过响应的 Http 标头来检测,对于http://bayanbox.ir/user/ahmadalli/images/div.png,标头是
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Tue, 14 Aug 2012 03:01:41 GMT
Server:bws
Transfer-Encoding:chunked
Vary:Accept-Encoding
using (MyClient client = new MyClient())
{
client.HeadOnly = true;
string uri = "http://www.google.com";
byte[] body = client.DownloadData(uri); // note should be 0-length
string type = client.ResponseHeaders["content-type"];
client.HeadOnly = false;
// check 'tis not binary... we'll use text/, but could
// check for text/html
if (type.StartsWith(@"text/"))
{
string text = client.DownloadString(uri);
Console.WriteLine(text);
}
}
无需下载页面即可从标题中获取 mime 类型。只需在响应标头中查找内容类型。