【发布时间】:2015-08-05 07:46:49
【问题描述】:
我目前正在使用以下内容从 android 文档 here 和 here 中读取文件。用户选择(在设置屏幕中)他们的站点是否使用 HTTP 或 HTTPS 协议。如果他们的网站使用 HTTP 协议,那么它适用于 HttpURLConnection 和 HttpsURLConnection,但如果他们的网站使用 HTTPS 协议,那么它不适用于 HttpURLConnection 协议,最糟糕的是它不会给我一个例外错误。下面是我正在使用的示例代码。
所以本质上,我如何检查网页 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:// 前缀,我怎么知道哪一个是正确的?
【问题讨论】:
-
也许我错过了什么。你不能检查 URL 字符串是否以
https://或http//开头? -
是的,我可以@Karim,但是如果用户选择了错误的字符串会怎样?这就是我遇到的问题。
-
在所有情况下都使用
HttpsURLConnection,或者不检查httpSelection.equals(...),而是立即检查URL是否以https://或http://开头,并且不要要求用户选择任何内容. -
@Karim 我认为这可能是迄今为止最好的解决方案。无论用户选择了什么
https://或http://,它都将始终有效。虽然我不确定这是否是正确的方法。 -
@Karim 我刚刚意识到它仍然无法正常工作,因为当 URL 是 https 并且用户输入 http 时,它会给我和以前一样的结果。