【问题标题】:How can I programmatically test an HTTP connection?如何以编程方式测试 HTTP 连接?
【发布时间】:2010-09-22 02:24:54
【问题描述】:

使用 Java,如何测试 URL 是否可联系并返回有效响应?

http://stackoverflow.com/about

【问题讨论】:

    标签: java http url httpconnection


    【解决方案1】:

    作为单元测试的解决方案:

    public void testURL() throws Exception {
        String strUrl = "http://stackoverflow.com/about";
    
        try {
            URL url = new URL(strUrl);
            HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
            urlConn.connect();
    
            assertEquals(HttpURLConnection.HTTP_OK, urlConn.getResponseCode());
        } catch (IOException e) {
            System.err.println("Error creating HTTP connection");
            e.printStackTrace();
            throw e;
        }
    }
    

    【讨论】:

    • @David:不,人们经常问他们已经知道答案的问题,只是为了给 SO 提供更多有用的内容。
    • 够了,为这种情况下的评论道歉。然后感谢您分享解决方案...
    • @brass-kazoo 我收到连接被拒绝异常:(
    • 不是也需要在finally 块中调用urlCon.disconnect() 吗?也许还完全消耗InputStream
    • 如果您在网络上可用的通勤器上使用它但没有运行网络服务器,则此方法将挂起。您需要在 HttpURLConnection 上使用 setConnectTimeout 和/或 setReadTimeout。
    【解决方案2】:

    如果我记得的话,从 java 5 开始,InetAdress 类包含一个名为 isReachable(); 的方法。所以你可以用它在java中做一个ping实现。您还可以为此方法指定超时。这只是上面发布的单元测试方法的另一种替代方法,它可能更有效。

    【讨论】:

    • isReachable 仅测试您可以访问该站点,而不是该站点实际运行(例如,返回 200 而不是 500 等)。
    • 此外,单元测试更需要彻底,而不是高效。 :-P
    【解决方案3】:
    System.out.println(new InetSocketAddress("http://stackoverflow.com/about", 80).isUnresolved());
    

    如果页面可达,则传递 false,这是一个前提条件。

    为了完全覆盖最初的问题,您需要实现 http getpost

    【讨论】:

      【解决方案4】:
      import org.apache.commons.validator.UrlValidator;
      
      public class ValidateUrlExample {
      
          public static void main(String[] args) {
      
              UrlValidator urlValidator = new UrlValidator();
      
              //valid URL
              if (urlValidator.isValid("http://www.mkyong.com")) {
                  System.out.println("url is valid");
              } else {
                  System.out.println("url is invalid");
              }
      
              //invalid URL
              if (urlValidator.isValid("http://invalidURL^$&%$&^")) {
                  System.out.println("url is valid");
              } else {
                  System.out.println("url is invalid");
              }
          }
      }
      

      输出:

      网址有效 网址无效

      来源:http://www.mkyong.com/java/how-to-validate-url-in-java/

      【讨论】:

      • -1。这根本不能回答问题:您发布的代码仅检查 URL 是否有效,而不检查该 URL 下的主机是否可访问或给出给定的响应。
      • 这是一个误导性的答案 -1。
      猜你喜欢
      • 2017-06-25
      • 1970-01-01
      • 2011-10-27
      • 2012-06-14
      • 1970-01-01
      • 2021-05-26
      • 2015-10-21
      • 2011-06-27
      • 1970-01-01
      相关资源
      最近更新 更多