URL이 존재하는지 또는 Java에서 404를 반환하는지 확인하는 방법은 무엇입니까?
String urlString = "http://www.nbc.com/Heroes/novels/downloads/Heroes_novel_001.pdf";
URL url = new URL(urlString);
if(/* Url does not return 404 */) {
System.out.println("exists");
} else {
System.out.println("does not exists");
}
urlString = "http://www.nbc.com/Heroes/novels/downloads/Heroes_novel_190.pdf";
url = new URL(urlString);
if(/* Url does not return 404 */) {
System.out.println("exists");
} else {
System.out.println("does not exists");
}
이것은 인쇄되어야합니다
exists
does not exists
테스트
public static String URL = "http://www.nbc.com/Heroes/novels/downloads/";
public static int getResponseCode(String urlString) throws MalformedURLException, IOException {
URL u = new URL(urlString);
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
huc.setRequestMethod("GET");
huc.connect();
return huc.getResponseCode();
}
System.out.println(getResponseCode(URL + "Heroes_novel_001.pdf"));
System.out.println(getResponseCode(URL + "Heroes_novel_190.pdf"));
System.out.println(getResponseCode("http://www.example.com"));
System.out.println(getResponseCode("http://www.example.com/junk"));
산출
200
200
200
404
해결책
.connect () 앞에 다음 줄을 추가하면 출력은 200, 404, 200, 404가됩니다.
huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
추가 할 수 있습니다.
HttpURLConnection.setFollowRedirects(false);
// note : or
// huc.setInstanceFollowRedirects(false)
리디렉션을 따르고 싶지 않은 경우 (3XX)
"GET"을 수행하는 대신 "HEAD"만 있으면됩니다.
huc.setRequestMethod("HEAD");
return (huc.getResponseCode() == HttpURLConnection.HTTP_OK);
이것은 나를 위해 일했습니다.
URL u = new URL ( "http://www.example.com/");
HttpURLConnection huc = ( HttpURLConnection ) u.openConnection ();
huc.setRequestMethod ("GET"); //OR huc.setRequestMethod ("HEAD");
huc.connect () ;
int code = huc.getResponseCode() ;
System.out.println(code);
위의 제안에 감사드립니다.
URL 개체 를 호출 하여 HttpUrlConnection 을 사용 openConnection()
합니다.
getResponseCode () 는 연결에서 읽은 후 HTTP 응답을 제공합니다.
예 :
URL u = new URL("http://www.example.com/");
HttpURLConnection huc = (HttpURLConnection)u.openConnection();
huc.setRequestMethod("GET");
huc.connect() ;
OutputStream os = huc.getOutputStream();
int code = huc.getResponseCode();
(검증되지 않은)
There is nothing wrong with your code. It's the NBC.com doing tricks on you. When NBC.com decides that your browser is not capable of displaying PDF, it simply sends back a webpage regardless what you are requesting, even if it doesn't exist.
You need to trick it back by telling it your browser is capable, something like,
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.13) Gecko/2009073021 Firefox/3.0.13");
Based on the given answers and information in the question, this is the code you should use:
public static boolean doesURLExist(URL url) throws IOException
{
// We want to check the current URL
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
// We don't need to get data
httpURLConnection.setRequestMethod("HEAD");
// Some websites don't like programmatic access so pretend to be a browser
httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
int responseCode = httpURLConnection.getResponseCode();
// We only accept response code 200
return responseCode == HttpURLConnection.HTTP_OK;
}
Of course tested and working.
참고URL : https://stackoverflow.com/questions/1378199/how-to-check-if-a-url-exists-or-returns-404-with-java
'Development Tip' 카테고리의 다른 글
keytool을 사용하여 PKCS12 키 저장소에 저장된 인증서를 나열하는 방법은 무엇입니까? (0) | 2020.10.26 |
---|---|
Android Studio에서 릴리스 Android 라이브러리 패키지 (aar)를 만드는 방법 (디버그 아님) (0) | 2020.10.26 |
Python 프로젝트를 구성하는 방법은 무엇입니까? (0) | 2020.10.26 |
모달 내에서 콘텐츠 스크롤을 활성화하는 방법은 무엇입니까? (0) | 2020.10.26 |
프로그램이 시작될 때 관리자 권한을 요청하는 방법은 무엇입니까? (0) | 2020.10.26 |