java中的HTTP和HTTPS检测

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的HTTP和HTTPS检测相关的知识,希望对你有一定的参考价值。

我有一个小程序,要求用户以http://www.cnn.com的形式输入URL(他们需要输入http //:或https // :),它将检索该网站的所有内容并打印到控制台。 我的问题是,如果用户不知道他们输入的URL是正确的http或https,我的程序需要处理该错误。例如,cnn.com是https://www.cnn.com但用户错误地输入http://www.cnn.com然后没有任何东西打印到控制台,因为's'跟随'http'。那么我该如何处理这个错误呢?某些网站也以“https”开头,但用户输入“http”。 对不起我的英语不好,任何帮助将不胜感激,并提前感谢。

class url2 {
public static void main(String[] args) {
try {
  String url;
  System.out.println("Enter the URL: ");
  BufferedReader f = new BufferedReader(new
  InputStreamReader(System.in));
  url=f.readLine();
  URL yahoo = new URL(url);
  URLConnection yahoo1=yahoo.openConnection();
  BufferedReader dis = new BufferedReader(new
  InputStreamReader(yahoo1.getInputStream()));
  String inputLine;

  while ((inputLine = dis.readLine()) != null) {
    System.out.println(inputLine);
  }
  dis.close();
} catch (MalformedURLException me) {
  System.out.println("MalformedURLException: " + me);
} catch (IOException ioe) {
  System.out.println("IOException: " + ioe);
    }
  }
}
答案

一种方法是尝试打开与特定端口的连接:80表示HTTP,443表示HTTPS。如果端口已关闭,则不支持HTTP / HTTPS。

码:

Socket socket = new Socket();
try {
    socket.connect(new InetSocketAddress("cnn.com", 80), 3000);
    // read one byte to make sure
    socket.getInputStream().read();
    // we've connected successfully, there is http:// support!
} catch (ConnectException e) {
    // the port is probably closed, no http:// here
} catch (SocketTimeoutException e) {
    // either port is not open, or the network is slow
} finally {
    socket.close();
}

此探测端口80.如果连接成功建立,您可以确定端口80(http端口)上有某些内容。但是如果发生超时(这里我设置3秒超时),这可能意味着端口未打开(并且没有http),或者网络连接存在一些问题,可能是暂时的。

所以这种方法不太可靠,但对于“好”的网站,您可以期望以低延迟访问。

以上是关于java中的HTTP和HTTPS检测的主要内容,如果未能解决你的问题,请参考以下文章

Android:使用Tab检测单个片段viewpager

(转) Java中的负数及基本类型的转型详解

使用 Pygments 检测代码片段的编程语言

12mmaction2 行为识别商用级别X3D复现 demo实现 检测自己的视频 Expanding Architecturesfor Efficient Video Recognition(代码片段

LockSupport.java 中的 FIFO 互斥代码片段

Python代码阅读(第13篇):检测列表中的元素是否都一样