Как получить тип содержимого веб-адреса?

Я хочу получить тип веб-адреса. Например, это страница Html, и ее тип страницы - text/html, но тип это text/xml. этот тип страницы кажется image/png, но это text/html.

Я хочу знать, как определить тип содержимого веб-адреса, например this?


person ahmadali shafiee    schedule 14.08.2012    source источник
comment
Не об этом должно быть. URL-адрес имеет тип содержимого в заголовке или нет.   -  person paparazzo    schedule 14.08.2012


Ответы (5)


должно быть что-то вроде этого

    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;
    }
person Dmitry Khryukin    schedule 14.08.2012
comment
Я также использовал ваш код здесь, спасибо. - person ahmadali shafiee; 17.08.2012
comment
request.Method = "HEAD"; также можно добавить для скорости. - person IS4; 15.10.2016
comment
if (response != null) contentType = response.ContentType; можно сократить до contentType = response?.ContentType; (информация здесь) - person mekb; 24.07.2019

Заголовок ответа HTTP: content-type

Для более подробного ответа задайте более подробный вопрос.

person Immersive    schedule 14.08.2012
comment
OP спросил, как получить эту информацию на C #, а не что такое заголовок. - person dotancohen; 14.08.2012

Вы можете определить 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
person Charlie    schedule 14.08.2012

Прочтите заголовки HTTP.

Заголовки HTTP сообщают вам тип контента. Например:

тип содержимого: приложение / xml.

Есть два способа определить тип контента

  1. расширение файла, вызываемое URL-адресом
  2. тип содержимого http-заголовка

Первый был в некоторой степени продвинут Microsoft в старые времена и больше не является хорошей практикой.

Если у клиента есть ограничения отображения, принимающие только определенный тип контента, он будет запрашивать сервер с такими заголовками, как

accept: application/json
accept: text/html
accept: application/xml

А затем, если сервер может предоставить один из них и выберет XML, он вернет контент с заголовком

content-type: application/xml.

Однако некоторые услуги включают дополнительную информацию, например

content-type: application/xml; charset=utf-8

вместо использования собственного заголовка для кодировки символов.

person Blessed Geek    schedule 14.08.2012
comment
OP спросил, как получить эту информацию на C #, а не что такое заголовок. - person dotancohen; 14.08.2012

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);
        }
    }

Вы получите тип пантомимы из заголовков, не загружая страницу. Просто найдите тип содержимого в заголовках ответа.

person EdFred    schedule 14.08.2012
comment
Предположительно MyClient является подклассом WebClient с поддержкой HEAD? - person Marc Gravell; 14.08.2012
comment
Да вы правы. Это было скопировано из другого образца, над которым я работал для проверки бинарных HTTP-ответов. - person EdFred; 14.08.2012
comment
это может быть очень полезно для читателей, если вы дадите ссылку на этот другой образец :) - person Marc Gravell; 14.08.2012
comment
WebClient с поддержкой метода - - person Anand Sainath; 08.08.2015