2012-01-04 14 views
6

こんにちは、私はC#でwebspiderのようなものを構築しています。私の研究では、私はリンクが内部または外部、インバウンドまたはアウトバウンドであるかどうかを調べる必要があるという問題に遭遇しました。だから私は私のために仕事をするための機能を作り出す必要があった。だから私は次の機能を思いついたが、私はその仕事を達成するための最良の可能性があるかどうかわからない。だから私はこの問題にあなたの意見を欲しいです。リンクが内部か外部かを確認してください。

私にはHTTPとリンクすることをasume

://またはhttps://リンクの前には 内部にあり、私はドメインhttp://www.blahblah.comを持っている場合は、テストのようなリンクはまだそれがHTTPを持っているという事実にもかかわらず、内部でなければなりません://は前面に表示されますが、http://www.somethingelse.com/?var1=http://www.blahblah.com/testのようなリンクは外部の文字列です。最初の文字のみをチェックしています。

private Boolean checklinkifinternal(String link) 
     { 
      Boolean isinternal = false; 

      if (link.IndexOf("http://") == 0 || link.IndexOf("https://") == 0) 
      { 
       //Then probably external 
       if (link.IndexOf("http://" + UrlName) == 0 || link.IndexOf("https://" + UrlName) == 0 || link.IndexOf("http://www." + UrlName) == 0 || link.IndexOf("https://www." + UrlName) == 0) 
       { 
        isinternal = true; 
       } 
      } 
      else 
      { 
       isinternal = true; 
      } 

      return isinternal; 
     } 
+0

どのように使用しているプロトコルによって外部/内部かどうかを判断できますか? – Shai

+3

http://127.0.0.1やhttp://192.168.1.1はどうでしょう。これらはどちらも内部的ですが、外部として渡すでしょう – Lloyd

+0

実際にはロイドのことを考えていませんでした。 – themis

答えて

6
Uri.Compare(new Uri("google.de"), new Uri("Google.de"), UriComponents.Host, UriFormat.SafeUnescaped, StringComparison.CurrentCulture); 

これは私が私の頭の上から言うものです:)

+0

内部については/外部定義。私はあなたが「私はまだ私が以前と同じサイトにいますか」と言っていると思います。「このホストは同じサイトにつながる2つのipsを持っていません」 –

+0

thanx私はこれをテストします – themis

+0

Volker Manuelはい私はこれを考える可能な事実です。 1つのドメインが一致する場合は、2つのipsが同じサイトである必要があります。ロードバランスはそのような事実の例ですか? – themis

1

それは依存しています。 http URI上にいる場合、ドメイン名が同じであってもhttps URIへのリンクは内部リンクとしてカウントされますか? (そしてその逆もあります)あなたは決定する必要があります。

また、アルゴリズムでは、ローカルファイルシステム(file://を使用)を考慮しません。

+0

はい、あなたも正しいです、ファイル内のthogh://test.zipは私が集団でなければならない何かではありませんが、何らかの方法でそれを処理する必要があります – themis

関連する問題