2012-01-04 2 views
6

안녕하세요 저는 C#에서 webspider와 같은 것을 구축하고 있습니다. 내 연구에서 나는 링크가 내외부, 인바운드 또는 아웃 바운드인지 확인해야하는 문제를 발견했습니다. 그래서 나는 나를 위해 일하는 기능을 만들어야했다. 그래서 다음과 같은 기능을 생각해 냈지만 그 일을 성취하기 위해서는 최선의 노력이 될지 확실하지 않습니다. 그래서이 문제에 대한 여러분의 의견을 듣고 싶습니다.링크가 내부 또는 외부인지 확인하십시오.

링크 앞에 http : // 또는 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

고맙습니다. 이것을 테스트 할 것입니다. – themis

+0

Volker Manuel 예 가능한 사실이다. 일치하는 도메인이 하나있는 경우 두 개의 ips가 같은 사이트 여야합니다. 로드 밸런스는 그러한 사실의 한 예입니까? – themis

1

의 상단에서 말할 것입니다. http URI를 사용하는 경우 도메인 이름이 같더라도 https URI에 대한 링크가 내부 링크로 간주됩니까? (반대의 경우도 마찬가지입니다.) 결정해야합니다.

또한 알고리즘은 로컬 파일 시스템 (file : // 사용)을 고려하지 않습니다.

+0

네, 당신도 정확합니다, 심지어 thogh 파일에 : //test.zip 내가 crowl해야하지만 내가 어떤 방식으로 그것을 처리해야 할 일이 아니다 – themis

관련 문제