Используйте HTTPWebRequest, чтобы получить заголовок удаленной страницы - PullRequest
1 голос
/ 24 ноября 2008

У меня есть веб-сервис, который действует как интерфейс между фермой веб-сайтов и некоторым аналитическим программным обеспечением. Часть отслеживания аналитики требует сбора заголовка страницы. Вместо того, чтобы передавать его с веб-страницы на веб-сервис, я хотел бы использовать HTTPWebRequest для вызова страницы.

У меня есть код, который получит всю страницу и проанализирует html, чтобы захватить тег заголовка, но я не хочу загружать всю страницу, чтобы просто получить информацию, которая находится в голове.

Я начал с

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("url");  
request.Method = "HEAD";

Ответы [ 4 ]

4 голосов
/ 24 ноября 2008

Отличная идея, но запрос HEAD возвращает только HTTP-заголовки документа. Сюда не входит элемент title, являющийся частью тела сообщения HTTP.

2 голосов
/ 23 мая 2011

Попробуйте это:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string page = @"http://stackoverflow.com/";
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(page);
            StreamReader SR = new StreamReader(req.GetResponse().GetResponseStream());

            Char[] buf = new Char[256];
            int count = SR.Read(buf, 0, 256);
            while (count > 0)
            {
                String outputData = new String(buf, 0, count);
                Match match = Regex.Match(outputData, @"<title>([^<]+)", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    Console.WriteLine(match.Groups[1].Value);
                }
                count = SR.Read(buf, 0, 256);
            }
        }

    }
}
0 голосов
/ 22 мая 2011

Если вы не хотите запрашивать всю страницу, вы можете запросить ее по частям. Спецификация http определяет заголовок http с именем Range. Вы бы использовали его, как показано ниже:

Диапазон: байты = 0-100

Вы можете просмотреть возвращенный контент и найти заголовок. Если его там нет, то запрашивайте Range: 101-200 и так далее, пока не получите то, что вам нужно.

Очевидно, что веб-сервер должен поддерживать диапазон, так что это может быть удар или пропустить.

0 голосов
/ 24 ноября 2008

Так что мне бы пришлось пойти с чем-то вроде ...

HttpWebRequest req   = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream st            = resp.GetResponseStream();
StreamReader sr      = new StreamReader(st);
string buffer        = sr.ReadToEnd();
int startPos, endPos;
startPos = buffer.IndexOf("&lt;title>",
StringComparison.CurrentCultureIgnoreCase) + 7;
endPos = buffer.IndexOf("&lt;/title>",
StringComparison.CurrentCultureIgnoreCase);
string title = buffer.Substring(startPos, endPos - startPos);
Console.WriteLine("Response code from {0}: {1}", s,
        resp.StatusCode);
Console.WriteLine("Page title: {0}", title);
sr.Close();
st.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...