1

Web サイトのファームと一部の分析ソフトウェアとの間のインターフェイスとして機能する Web サービスがあります。分析追跡の一部では、ページ タイトルを収集する必要があります。WebページからWebサービスに渡すのではなく、HTTPWebRequestページの呼び出しに使いたいと思います。

ページ全体を取得し、html を解析してタイトル タグを取得するコードがありますが、頭の中にある情報を取得するためにページ全体をダウンロードする必要はありません。

私はから始めました

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

4 に答える 4

4

素晴らしいアイデアですが、HEADリクエストはドキュメントの HTTP ヘッダーのみを返します。これには、HTTP メッセージ本文の一部である title 要素は含まれません。

于 2008-11-24T16:21:32.273 に答える
2

これを試して:

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

    }
}
于 2011-05-23T01:15:24.400 に答える
0

ページ全体をリクエストしたくない場合は、分割してリクエストできます。http 仕様では、Range と呼ばれる http ヘッダーが定義されています。以下のように使用します。

範囲: バイト = 0 ~ 100

返されたコンテンツに目を通し、タイトルを見つけることができます。そこにない場合は、必要なものが得られるまで Range: 101-200 などをリクエストします。

明らかに、Web サーバーは範囲をサポートする必要があるため、これはヒットまたはミスする可能性があります。

于 2011-05-22T19:57:33.117 に答える
-1

だから私は次のようなものに行かなければならないでしょう...

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();
于 2008-11-24T16:33:30.657 に答える