2013-02-27 3 views
2

URL이 내 스크립트로 전달되는 다양한 웹 사이트의 크기를 검색하려고 시도하지만 잘못된 URL을 전달할 때 예외가 발생하지 않고 단순히 매우 작은 페이지. 나는 Source.fromURL를 사용하고, 나는 다음과 같은 결과를 얻을 :이 말한대로 그 안에 아무것도 안,Source.fromURL이 잘못된 URL에 대한 예외를 throw하지 않습니다.

thisIsClearlyABoggusURLThatCantPossiblyLeadAnyway 1052 
www.bbc.co.uk 113871 

첫 번째를하지만 않습니다.

def main(args:Array[String]){ 
    val tasks = for(arg <- args) yield future { 
     try { 
      println(arg + " " + Source.fromURL(attachPrefix(arg)).length) 
     } catch { 
      case e : java.net.UnknownHostException => println(arg + " *") 
     } 
    } 

    awaitAll(20000L, tasks: _*) 
} 

def attachPrefix(url:String) = url.slice(0, 4) match { 
    case "http" => url 
    case "www." => "http://" + url 
    case _ => "http://www." + url 
} 

각 인수가 그것을 사용하기 전에 필요한 접두사를 가지고 보장하기 위해 기능 attachPrefix로 전달되는 다음과 같이 내 스크립트입니다. 이 문제는 내가 둘 사이의 차이는 무엇

args map attachPrefix 

에 앞서 무엇을하고 있었는지 인의 arg에 그것을 매핑 대신 매개 변수로 URL을 전달 시작한 이후 약 와서 왜왔다 내 현재 그런 행동을하는 사람?

+0

[자바의 접근 방식 (http://stackoverflow.com/q/2230676/298389) –

+0

고마워 : 최상위 도메인이 6 개 글자를 초과하기 때문에 예를 들어,이, 당신의 예를 잡을 것 제안을 위해. 그 중 하나에 대해서는 몰랐습니다. 그러나이 경우에는 순수 스칼라에 있어야합니다. –

+1

'scala.io.Source.fromURL ("http : //www.thisIsClearlyABoggusURLThatCantPossiblyLeadAnyway")''java.net.UnknownHostException'을 던집니다. 크기를 검색하는 코드가 정확히 무엇을하는지 궁금합니다. 당신의 코드에'toString'을 가지고 있을지도 모릅니다. 실제로 예외 텍스트의 길이를 검색하고 있습니다, 아마도 ...? – Hbf

답변

1

Source.fromURL(URI) 서명을 사용할 수 있습니다. URI을 만들면 URL의 유효성을 확인하고 here으로 문서화합니다. 그러나이 경우 에 관한 한 URLhttp://www.thisIsClearlyABoggusURLThatCantPossiblyLead‌​Anyway이 유효합니다. 반면에 om-nom-nom이 제안한 은 유효하지 않은 것으로 간주합니다. 최상위 도메인 세그먼트가 이미 오래된 것보다 4 문자 이상 크기 때문입니다. Scala 유효성 검사 라이브러리에 대해 전혀 알지 못하거나 왜 이것이 요구 사항인지는 모르겠지만 정규 표현식을 사용하여 유효성 검사를 시도해 볼 수는 있습니다.

val re = """^(https?://)?(([\w!~*'().&=+$%-]+:)?[\w!~*'().&=+$%-][email protected])?(([0-9]{1,3}\.){3}[0-9]{1,3}|([\w!~*'()-]+\.)*([\w^-][\w-]{0,61})?[\w]\.[a-z]{2,6})(:[0-9]{1,4})?((/*)|(/+[\w!~*'().;?:@&=+$,%#-]+)+/*)$""".r 
re.pattern.matcher("http://google.com").matches // true 
re.pattern.matcher("http://www.thisIsClearlyABoggusURLThatCantPossiblyLeadAnyway").matches // false 
사용할 수
관련 문제