2012-01-04 19 views
6

Witam buduję coś takiego webspider w C#. W moich badaniach natknąłem się na problem, który muszę określić, czy łącze jest wewnętrzne czy zewnętrzne, przychodzące lub wychodzące. Musiałem więc stworzyć funkcję, która wykonałaby dla mnie pracę. Więc wymyśliłem następującą funkcję, ale nie jestem pewien, czy jest to najlepszy możliwy algorytm do wykonania tego zadania. Chciałbym więc państwa opinie na temat tego problemu.Sprawdź, czy łącze jest wewnętrzne lub zewnętrzne

Zakładam, że linki bez http: // lub https: // przed linkiem są wewnętrzne , a jeśli mam domenę http://www.blahblah.com, to test taki jak link powinien nadal być wewnętrzny pomimo faktu, że ma on http : // z przodu, ale link taki jak http://www.somethingelse.com/?var1=http://www.blahblah.com/test jest zewnętrzny. Sprawdzam tylko pierwsze litery.

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

Jak określić, czy jest to zewnętrzne/wewnętrzne przez protokół, z którego korzysta ...? – Shai

+3

Co powiecie na http://127.0.0.1 lub http://192.168.1.1 oba są wewnętrzne, ale przeszedłby jako zewnętrzny – Lloyd

+0

Rzeczywiście nie pomyślał o tym Lloyd – themis

Odpowiedz

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

jest to, co chciałbym powiedzieć, że od szczytu mojej głowy :)

+0

as for internal/definicja zewnętrzna. myślę, że nazywasz to "jestem wciąż na tej samej stronie, co byłem wcześniej", a nie "czy ten host ma 2 ips, które prowadzą do tej samej witryny" –

+0

thanx testuję to – themis

+0

Volker Manuel tak myślę, że to jest możliwym faktem. Jeśli istnieje jedna domena odpowiadająca dwóm ips powinna być tą samą witryną. Load Balance jest przykładem takiego faktu? – themis

1

to zależy. Jeśli korzystasz z identyfikatora URI protokołu HTTP, czy link do identyfikatora URI HTTPS jest linkiem wewnętrznym, nawet jeśli nazwa domeny jest taka sama? (I vice versa.) Będziesz musiał zdecydować.

Twój algorytm nie uwzględnia również lokalnych systemów plików (przy użyciu pliku: //).

+0

Tak, masz rację, nawet thogh in file: //test.zip nie jest czymś, co powinienem robić, ale muszę go w jakiś sposób obsłużyć – themis

Powiązane problemy