[java] Java에서 URL 확인

주어진 URL의 유효성을 검사하기 위해 Java에 표준 API가 있는지 알고 싶습니까? URL 문자열이 올바른지 즉, 주어진 프로토콜이 유효한지 확인한 다음 연결을 설정할 수 있는지 확인하고 싶습니다.

HttpURLConnection을 사용하여 URL을 제공하고 연결을 시도했습니다. 내 요구 사항의 첫 번째 부분이 충족되는 것 같지만 HttpURLConnection.connect ()를 수행하려고하면 ‘java.net.ConnectException : Connection rejectd’예외가 발생합니다.

프록시 설정 때문일 수 있습니까? 프록시에 대한 시스템 속성 설정을 시도했지만 성공하지 못했습니다.

내가 뭘 잘못하고 있는지 알려주세요.



답변

커뮤니티의 이익을 위해이 스레드는
url validator java “를 검색 할 때 Google에서 최상위에 있습니다.


예외 포착은 비용이 많이 들고 가능하면 피해야합니다. String이 유효한 URL인지 확인하려는 경우 Apache Commons Validator 프로젝트 의 UrlValidator 클래스를 사용할 수 있습니다 .

예를 들면 :

String[] schemes = {"http","https"}; // DEFAULT schemes = "http", "https", "ftp"
UrlValidator urlValidator = new UrlValidator(schemes);
if (urlValidator.isValid("ftp://foo.bar.com/")) {
   System.out.println("URL is valid");
} else {
   System.out.println("URL is invalid");
}


답변

URL개체와 개체를 모두 만들어야 URLConnection합니다. 다음 코드는 URL 형식과 연결을 설정할 수 있는지 여부를 테스트합니다.

try {
    URL url = new URL("http://www.yoursite.com/");
    URLConnection conn = url.openConnection();
    conn.connect();
} catch (MalformedURLException e) {
    // the URL is not in a valid form
} catch (IOException e) {
    // the connection couldn't be established
}


답변

java.net.URL클래스는 모든에서 실제로 URL을 확인하는 좋은 방법입니다. MalformedURLException되어 있지 건설 기간 동안 모든 잘못된 URL을 발생합니다. 캐칭 IOExceptionjava.net.URL#openConnection().connect()URL의 유효성을 검사하지 않으며 연결을 설정할 수 있는지 여부 만 알려줍니다.

다음 코드를 고려하십시오.

    try {
        new URL("http://.com");
        new URL("http://com.");
        new URL("http:// ");
        new URL("ftp://::::@example.com");
    } catch (MalformedURLException malformedURLException) {
        malformedURLException.printStackTrace();
    }

.. 예외를 발생시키지 않습니다.

컨텍스트 프리 문법을 사용하여 구현 된 일부 유효성 검사 API를 사용하거나 매우 단순화 된 유효성 검사에서는 정규식을 사용하는 것이 좋습니다. 그러나이를 위해 우수한 또는 표준 API를 제안 할 누군가가 필요합니다. 저는 최근에야 직접 검색을 시작했습니다.

참고URL#toURI() 예외 처리와 함께 java.net. URISyntaxExceptionURL 유효성 검사를 용이하게 할 수
있다고 제안되었습니다 . 그러나이 방법은 위의 매우 간단한 경우 중 하나만 포착합니다.

결론은 URL의 유효성을 검사하는 표준 Java URL 파서가 없다는 것입니다.


답변

표준 API 사용 하여 문자열을 URL개체에 전달한 다음 개체로 변환 URI합니다. 이것은 RFC2396 표준에 따라 URL의 유효성을 정확하게 결정합니다.

예:

public boolean isValidURL(String url) {

    try {
        new URL(url).toURI();
    } catch (MalformedURLException | URISyntaxException e) {
        return false;
    }

    return true;
}


답변

를 사용하여 android.webkit.URLUtil안드로이드에 :

URLUtil.isValidUrl(URL_STRING);

참고 : 전체 URL이 유효한 것이 아니라 URL의 초기 스키마를 확인하는 것입니다.


답변

타사 라이브러리에 의존하지 않고 Java의 표준에 따라 URL 유효성 검사를 수행하는 방법이 있습니다.

boolean isValidURL(String url) {
  try {
    new URI(url).parseServerAuthority();
    return true;
  } catch (URISyntaxException e) {
    return false;
  }
}

유효한 URI 인 URI검사 생성자 및 URN이 아닌 URL (절대 또는 상대)인지 확인하는 url호출 parseServerAuthority입니다.


답변

URL 개체가 유효성 검사와 연결을 모두 처리한다는 점을 지적하는 것이 중요합니다. 그러면 sun.net.www.protocol 에서 핸들러가 제공된 프로토콜 ( file ,
ftp , gopher , http , https , jar , mailto , netdoc ) 만 유효한 프로토콜 입니다. 예를 들어, ldap 프로토콜 을 사용하여 새 URL을 만들어보십시오 .

new URL("ldap://myhost:389")

당신은 java.net.MalformedURLException: unknown protocol: ldap.

자체 처리기를 구현하고 URL.setURLStreamHandlerFactory(). URL 구문의 유효성을 검사하고 싶다면 정규 표현식이 더 간단한 솔루션 인 것 같습니다.