주어진 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을 발생합니다. 캐칭 IOException
은 java.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. URISyntaxException
URL 유효성 검사를 용이하게 할 수
있다고 제안되었습니다 . 그러나이 방법은 위의 매우 간단한 경우 중 하나만 포착합니다.
결론은 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 구문의 유효성을 검사하고 싶다면 정규 표현식이 더 간단한 솔루션 인 것 같습니다.