如何检查URL是否存在或返回404与Java?

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 

testing

 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) 

如果你不想遵循redirect(3XX)

而不是做一个“GET”,一个“头”是你所需要的。

 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); 

感谢上面的build议。

通过调用URL对象上的openConnection()来使用HttpUrlConnection 。

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(); 

(未testing)

你的代码没有问题。 这是NBC.com在欺骗你。 当NBC.com决定您的浏览器不能显示PDF时,即使它不存在,它也会简单地发送一个网页,无论您要求什么。

你需要通过告诉它你的浏览器是否有能力来欺骗它,

 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"); 

根据问题中给出的答案和信息,这是你应该使用的代码:

 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; } 

当然testing和工作。