Java -检查URL是否有效

vbopmzt1  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(122)
    • 需要:**检查URL是否有效(即返回状态代码-200)
    • 问题:**我尝试了这些链接中提供的解决方案,但似乎不适用于http状态代码不是200的URL。程序执行在connection.getResponseCode()处挂起
    • 资源:**工作链接-url1(即状态代码= 200 &在浏览器中收到下载文件的提示)无法工作链接-url2(即状态代码= 500)

浏览器开发者工具,显示工作URL和非工作URL的返回代码

    • 验证码:**
      方法1-
try {
                URL u = new URL(url1); // url1 -> Works, url2 -> does not work
                HttpURLConnection connection = (HttpURLConnection) u.openConnection();
                connection.setRequestMethod("GET");
    
                int responseCode = connection.getResponseCode(); // Program hangs here for url2
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    System.out.println("URL is working fine.");
                } else {
                    System.out.println("URL returned a response code: " + responseCode);
                }
            } catch (Exception e) {
                System.out.println("Error occurred while checking the URL: " + e.getMessage());
            }
        }

方法2(使用Apache Commons UrlValidator类)-

UrlValidator urlValidator = new UrlValidator();
    System.out.println(urlValidator.isValid(url1)); // Working URL
    System.out.println(urlValidator.isValid(url2)); // Invalid URL, but still shows valid
    • 添加:**如果有人可以指出我可以改变什么,以确保getResponseCode()在URL不工作时返回状态代码,在这种情况下或任何其他替代方法将有所帮助。
bybem2ql

bybem2ql1#

你在这里谈论两件不同的事情:

  1. URL是否有效
    1.对URL的请求是否会成功,并返回200响应代码。
    来自Apache Commons的UrlValidator只会检查第一个,所以当你有一个注解// Invalid URL, but still shows valid时,这是不正确的。URL实际上是有效的。当您发出请求时,响应代码不是200的事实不会使URL无效。500错误意味着处理请求的代码有一个bug,很可能抛出某种异常。
    在尝试发出请求之前,您可能应该检查URL是否与UrlValidator有效。这将帮助您避免在URL无效时发出请求。由于此验证是使用计算机的CPU计算的,因此它比发出注定会失败的网络请求快得多。
    但是,即使URL是有效的,您仍然需要发出请求并检查响应代码,就像您正在做的那样,以验证响应是否相关。
nwlls2ji

nwlls2ji2#

对于任何面临类似问题的人,我使用HTTPstatus API管理了一个解决方案。
connection.getResponseCode()挂起无效的情况下,不知道为什么。如果有时间的话,也许一些Maven可以检查一下。
不知道为什么我的问题被否决了,尽管遵循了指导方针,清楚地说明了问题是什么,所做的研究以及我寻求的具体帮助。

相关问题