2012-01-04 13 views
6

Hola estoy creando algo así como un webspider en C#. En mi investigación, me encontré con un problema en el que necesitaba disuadirme si un enlace es interno o externo, entrante o saliente. Entonces necesitaba crear una función para hacer el trabajo por mí. Así que se me ocurrió la siguiente función, pero no estoy seguro de si es el mejor algoritmo posible para llevar a cabo esa tarea. Entonces me gustaría tener sus opiniones sobre este problema.Comprueba si un enlace es interno o externo

I Asume que los enlaces sin http: // o https: // delante del enlace son internos y si tengo un dominio http://www.blahblah.com a continuación un enlace como prueba todavía debe ser interna a pesar del hecho de que tiene http : // al frente, pero un enlace como http://www.somethingelse.com/?var1=http://www.blahblah.com/test es externo. Estoy comprobando las primeras letras solamente.

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

¿cómo se puede determinar si es externo/interno según el protocolo que está usando ...? – Shai

+3

¿Qué pasa con http://127.0.0.1 o http://192.168.1.1 ambos son internos pero pasarían como externos – Lloyd

+0

de hecho no pensé en eso Lloyd – themis

Respuesta

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

esto es lo que yo diría que desde la parte superior de mi cabeza :)

+0

en cuanto a internos/definición externa. Creo que te refieres a él como "todavía estoy en el mismo sitio actualmente que antes" y no "este host tiene 2 ips que conducen al mismo sitio" –

+0

gracias probaré esto – themis

+0

Volker Manuel sí, creo que esto es un hecho posible para. Si hay 1 coincidencia de dominio, dos ips deben ser el mismo sitio. Load Balance es un ejemplo de tal hecho? – themis

1

Depende. Si tiene un URI http, ¿un enlace a un URI https cuenta como un enlace interno, incluso si el nombre de dominio es el mismo? (Y viceversa). Tendrás que decidir.

Además, su algoritmo no tiene en cuenta los sistemas de archivos locales (utilizando file: //).

+0

sí, usted está en lo correcto, incluso en el archivo: //test.zip no es algo que debería llamar, pero sí tengo que manejarlo de alguna manera – themis

Cuestiones relacionadas