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을 발생합니다. 캐칭 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) {
URL u = null;
try {
u = new URL(url);
} catch (MalformedURLException e) {
return false;
}
try {
u.toURI();
} catch (URISyntaxException e) {
return false;
}
return true;
}
를 사용하여 android.webkit.URLUtil
안드로이드에 :
URLUtil.isValidUrl(URL_STRING);
Note: It is just checking the initial scheme of URL, not that the entire URL is valid.
There is a way to perform URL validation in strict accordance to standards in Java without resorting to third-party libraries:
boolean isValidURL(String url) {
try {
new URI(url).parseServerAuthority();
return true;
} catch (URISyntaxException e) {
return false;
}
}
The constructor of URI
checks that url
is a valid URI, and the call to parseServerAuthority
ensures that it is a URL (absolute or relative) and not a URN.
Just important to point that the URL object handle both validation and connection. Then, only protocols for which a handler has been provided in sun.net.www.protocol are authorized (file, ftp, gopher, http, https, jar, mailto, netdoc) are valid ones. For instance, try to make a new URL with the ldap protocol:
new URL("ldap://myhost:389")
You will get a java.net.MalformedURLException: unknown protocol: ldap
.
You need to implement your own handler and register it through URL.setURLStreamHandlerFactory()
. Quite overkill if you just want to validate the URL syntax, a regexp seems to be a simpler solution.
Are you sure you're using the correct proxy as system properties?
Also if you are using 1.5 or 1.6 you could pass a java.net.Proxy instance to the openConnection() method. This is more elegant imo:
//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);
Thanks. Opening the URL connection by passing the Proxy as suggested by NickDK works fine.
//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);
System properties however doesn't work as I had mentioned earlier.
Thanks again.
Regards, Keya
참고URL : https://stackoverflow.com/questions/1600291/validating-url-in-java
'developer tip' 카테고리의 다른 글
"java.security.cert.CertificateException : 제목 대체 이름 없음"오류를 수정하는 방법은 무엇입니까? (0) | 2020.08.26 |
---|---|
SmtpException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed (0) | 2020.08.26 |
파일을 WPF로 끌어서 놓기 (0) | 2020.08.26 |
@Transactional (propagation = Propagation.REQUIRED) (0) | 2020.08.26 |
std :: set에 "contains"멤버 함수가없는 이유는 무엇입니까? (0) | 2020.08.26 |