15

これにはC#とASP.NETを使用しています。

IIS 6.0サーバーで多くの「奇妙な」要求を受け取ります。これらをドメインごとにログに記録し、カタログ化したいです。

例えば。次のような奇妙なリクエストがあります。

後者の3つは明らかですが、「example.com」がサーバーでホストされているため、すべてを1つに分類したいと思います。残りは、ごめんなさい:-)ではありません

だから私は上記からexample.comを取得する方法についていくつかの良いアイデアを探しています。次に、m。、wap。、iphoneなどをグループにまとめたいのですが、これはおそらくモバイルショートカットのリストをすばやく検索するだけです。最初にこのリストをハンドコーディングできます。

しかし、ここで正規表現が答えですか、それとも純粋な文字列操作が最も簡単な方法ですか?URL文字列を「。」で「分割」することを考えていました。そしてitem[0]とitem[1]を探します...

何か案は?

4

7 に答える 7

11

次のコードは、このUriクラスを使用してホスト名を取得しUri.Host、ホスト名をピリオドで分割して第 2 レベルのホスト (examplecompany.com) を取得します。

var uri = new Uri("http://www.poker.winner4ever.examplecompany.com/");
var splitHostName = uri.Host.Split('.');
if (splitHostName.Length >= 2)
{
    var secondLevelHostName = splitHostName[splitHostName.Length - 2] + "." +
                              splitHostName[splitHostName.Length - 1];
}
于 2011-01-10T02:37:25.853 に答える
4

これは、異なるドメイン レベルの最新のデータベースがなければ不可能です。

検討:

s1.moh.gov.cn
moh.gov.cn
s1.google.com
google.com

では、どのレベルでドメインを取得したいですか? TLDSLDccTLD...に完全に依存します。なぜならccTLD、国の支配下でSLDは、あなたには知られていない非常に特別なものを定義する可能性があるからです。

于 2011-01-10T05:53:16.137 に答える
2

URL のドメイン コンポーネントを選択するために、.NET 2+ で使用するライブラリを作成しました。

詳細は github にありますが、以前のオプションよりも優れている点の 1 つは、 http://publicsuffix.orgから最新のデータを自動的に (月に 1 回) ダウンロードできるため、ライブラリからの出力は多かれ少なかれドメインのセキュリティ境界を確立するために Web ブラウザによって使用される出力 (つまり、かなり良い)。

まだ完璧ではありませんが、私のニーズには合っていて、他のユースケースに適応するのに多くの作業を必要としないので、必要に応じてフォークしてプルリクエストを送信してください。

于 2015-07-01T21:12:16.783 に答える
1

正規表現を使用します。

^https?://([\w./]+[^.])?\.?(\w+\.(com)|(co.uk)|(com.au))$

これは、関心のある TLD で終わるすべての URL と一致します。必要なだけリストを拡張します。さらに、キャプチャ グループには、サブドメイン、ホスト名、および TLD がそれぞれ含まれます。

于 2011-01-10T04:15:32.673 に答える
0
uri.Host.ToLower().Replace("www.","").Substring(uri.Host.ToLower().Replace("www.","").IndexOf('.'))
  • 「.com」を返します

    Uri uri = new Uri("http://stackoverflow.com/questions/4643227/top-level-domain-from-url-in-c");

  • 「.co.jp」を返します Uri uri = new Uri("http://stackoverflow.co.jp");

  • 「.s1.moh.gov.cn」を返します Uri uri = new Uri("http://stackoverflow.s1.moh.gov.cn");

于 2011-02-18T16:59:08.020 に答える