>  기사  >  Java  >  Java의 URL에서 도메인 이름을 안정적으로 추출하는 방법은 무엇입니까?

Java의 URL에서 도메인 이름을 안정적으로 추출하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 04:21:31699검색

How to Reliably Extract Domain Names from URLs in Java?

URL에서 도메인 이름 추출

URL에서 도메인 이름을 추출하는 것은 웹 개발 및 프로그래밍에서 일반적인 작업입니다. 이 작업에 대한 접근 방식은 여러 가지가 있지만 가장 간단하고 강력한 방법은 java.net.URI 클래스를 사용하는 것입니다.

원본 Java 코드

제공되는 Java 코드는 java.net.URL 클래스를 사용하여 도메인 이름을 추출합니다. 이 접근 방식은 대부분의 경우 작동할 수 있지만 제한 사항과 잠재적인 단점이 있습니다.

원본 코드의 제한 사항:

  • URL이 다음으로 시작한다고 가정합니다. 항상 그렇지는 않을 수도 있는 "http" 또는 "https"(예: 상대 URL).
  • equal 메서드를 사용하여 URL을 비교할 때 DNS 조회를 수행하므로 서비스 거부에 취약합니다.

URI를 사용한 대체 접근 방식

선호되는 접근 방식은 표준화되고 안정적인 구문 분석 방법을 제공하는 java.net.URI 클래스를 사용하는 것입니다. 그리고 URL을 조작합니다. 다음 코드 조각은 이 접근 방식을 보여줍니다.

<code class="java">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;
}</code>

이 코드는 먼저 새 URI(url) 생성자를 사용하여 URL을 URI 개체로 구문 분석합니다. 그런 다음 URI의 호스트 구성 요소를 반환하는 getHost() 메서드를 사용하여 도메인 이름을 검색합니다. 호스트 구성 요소가 "www."로 시작하는 경우 하위 문자열 방법을 사용하여 ".www" 접두사가 제거됩니다.

고려해야 할 엣지 케이스

개선된 URI 기반 접근 방식이지만 일부 극단적인 경우에는 여전히 문제가 발생할 수 있습니다.

  • 상대 경로가 있는 URL(예: "httpfoo/bar")
  • 대소문자를 구분하지 않는 프로토콜(예: "HTTP) ://example.com/")
  • 프로토콜 상대 URL(예: "//example.com/")
  • "www"로 시작하는 경로 구성 요소가 있는 상대 URL(예: "www/foo")

이러한 극단적인 경우를 처리하려면 RFC 3986 부록 B에 제공된 정규식과 같은 보다 포괄적인 구문 분석 메커니즘이 필요할 수 있습니다.

위 내용은 Java의 URL에서 도메인 이름을 안정적으로 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.