我目前正在使用以下代码从android docs here和here中读取文件。(在设置屏幕中)如果他们的网站使用HTTP或HTTPS协议。如果他们的网站使用HTTP协议,那么它对HttpURLConnection
和HttpsURLConnection
都有效,但如果他们的网站使用HTTPS协议,那么它就不能在HttpURLConnection
协议下工作,而且最糟糕的是它不会给予我一个异常错误。
因此,从本质上讲,我如何检查Web URL是否是HTTPS协议,从而检查用户是否选择了正确的协议?
InputStream inputStream;
HttpURLConnection urlConnection;
HttpsURLConnection urlHttpsConnection;
boolean httpYes, httpsYes;
try {
if (httpSelection.equals("http://")) {
URL url = new URL(weburi);
urlConnection = (HttpURLConnection) url.openConnection();
inputStream = new BufferedInputStream((urlConnection.getInputStream()));
httpYes = True;
}
if (httpSelection.equals("https://")) {
URL url = new URL(weburi);
urlHttpsConnection = (HttpsURLConnection) url.openConnection();
urlHttpsConnection.setSSLSocketFactory(context.getSocketFactory());
inputStream = urlHttpsConnection.getInputStream();
https=True;
}
catch (Exception e) {
//Toast Message displays and settings intent re-starts
}
finally {
readFile(in);
if(httpYes){
urlConnection.disconnect();
httpYes = False;
}
if(httpsYes){
urlHttpsConnection.disconnect();
httpsYes = False;
}
}
}
编辑:
为了更详细地说明一些。我需要看看它是否返回一个有效的响应从一个网站?所以,如果用户选择http而不是https,我怎么能检查,看看http是不正确的前缀/协议?
我如何检查网站是否使用HTTPS或HTTP协议?如果用户只输入www. google.com,而我附加了**https://或http://**前缀,我如何知道哪个是正确的?
8条答案
按热度按时间gc0ot86w1#
您可以使用android URLUtil来检查URL是否为HTTP或HTTPS:
编辑:
i7uaboj42#
rnmwe5a23#
请尝试以下代码:
zzzyeukh4#
我已经检查了URLUtil类,并检查了它包含这么多的方法,这些种类的东西,但我只是扩展的答案,你也可以简单地做如下:-
axzmvihb5#
这可以通过使用Util进行检查。
bkkx9g8r6#
你可以试试这个
xqk2d5yq7#
我认为这是可行的,至少看起来是可行的,你们觉得呢?我把if语句放在
httpsYes = True
和httpYes = True
之前。似乎当选择HTTPS协议时,它希望使用响应代码302进行重定向,但对于所有其他示例,它使用响应代码200进行连接。我抛出了一个新的
ConnectionException()
错误,因为它将用户带回到设置屏幕以更正URL错误。对于HTTPS协议:
对于HTTP协议:
注解?我应该使用
urlConnection.getResponseCode() > 199 && < 300
?来覆盖所有成功的连接吗?zbdgwd5y8#
我的建议是创建正则函数表达式。例如:
此致