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检测的主要内容,如果未能解决你的问题,请参考以下文章
12mmaction2 行为识别商用级别X3D复现 demo实现 检测自己的视频 Expanding Architecturesfor Efficient Video Recognition(代码片段