URL을 구문 분석하려면을 사용하십시오 java.net.URI. java.net.URL이 equals방법은 DNS 조회를 수행하므로 신뢰할 수없는 입력과 함께 사용하는 경우 서비스 거부 공격에 취약 할 수 있습니다.
"고슬링 씨-왜 URL을 빨랐습니까?" 그러한 문제 중 하나를 설명합니다. java.net.URI대신 에 사용하는 습관을들이십시오 .
public static String getDomainName(String url) throws URISyntaxException {
URI uri = new URI(url);
String domain = uri.getHost();
return domain.startsWith("www.") ? domain.substring(4) : domain;
}
당신이 원하는 것을해야합니다.
그것은 잘 작동하는 것처럼 보이지만 더 나은 접근 방법이 있거나 가장자리가있는 경우가 있습니다.
유효한 URL에 대해 작성된 코드가 실패합니다.
httpfoo/bar-로 시작하는 경로 구성 요소가있는 상대 URL http.
HTTP://example.com/ -프로토콜은 대소 문자를 구분하지 않습니다.
//example.com/ -호스트가있는 프로토콜 상대 URL
www/foo -로 시작하는 경로 구성 요소가있는 상대 URL www
wwwexample.com-하지 않는 도메인 이름으로 시작 www.은 있지만 시작됩니다 www.
계층 적 URL에는 복잡한 문법이 있습니다. RFC 3986을주의 깊게 읽지 않고 자신의 파서를 롤링하려고하면 잘못 될 수 있습니다. 핵심 라이브러리에 내장 된 것을 사용하십시오.
java.net.URI거부 되는 지저분한 입력을 처리해야하는 경우 RFC 3986 부록 B를 참조하십시오 .
부록 B. 정규 표현식으로 URI 참조 구문 분석
"first-match-wins"알고리즘은 POSIX 정규식에서 사용하는 "욕심쟁이"명확화 방법과 동일하므로 URI 참조의 잠재적 5 가지 구성 요소를 구문 분석하기 위해 정규식을 사용하는 것이 자연스럽고 일반적입니다.
다음 줄은 올바르게 구성된 URI 참조를 구성 요소로 분류하기위한 정규식입니다.
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
위의 두 번째 줄에있는 숫자는 가독성을 돕기위한 것입니다. 그것들은 각 부분 표현에 대한 기준점을 나타낸다 (즉, 각 쌍 괄호).
http://74.125.226.70하고 그것이 어떻게 작동하는지 알려주세요 :)