如何在android中检查url的协议?

时间:2015-03-11 06:32:22

标签: java android http android-4.4-kitkat

我正在向服务器发送请求以获取一些数据,但在获取数据之前,我想检查该网址是http还是https

我该如何判断,即如何检查网址是http还是https

我使用了一种方法,我使用http://向服务器发送请求。如果发生协议异常,我再次使用https://向服务器发送请求。我可以这样检查,但我不希望发生异常。有没有办法再检查一下?

Follwoing是将请求发送到服务器的代码示例: 使用OkHttp -

  try 
              { 

                OkHttpClient client = new OkHttpClient();
                Request request = new Request.Builder()
                                    .url(url[0])
                                    .build();
                Response httpResponse = client.newCall(request).execute();
              }
              catch(IOException e)
              {
                Log.i("log","exception");


              }

使用HtppUrlConnection:

try 
                  { 

                HttpURLConnection.setFollowRedirects(true);
                con = (HttpURLConnection) new URL(url[0]).openConnection();
                con.setRequestMethod("GET");
                con.setConnectTimeout(10000);
                  }
                  catch(IOException e)
                  {
                    Log.i("log","exception");


                  }

2 个答案:

答案 0 :(得分:0)

尝试调试并检查连接是否是运行时的HttpURLConnection或HttpsURLConnection。如果是这种情况,您可以使用内省并将连接强制转换为正确的类类型。 E.g:

if (con instanceOf HttpsURLConnection) { /* ... handle https ... */}

但我不确定你的问题。首先使用new URL(url[0])中的参数构造URL。这意味着您事先知道了网址,因此也知道协议......

我假设url [0]是String。你不能做if(url[0].startsWith("https"))吗?

或者,您也可以先创建一个URL实例,然后在对象上调用getProtocol

答案 1 :(得分:0)

String解析为URL后,即可获得协议:

URL url = new URL(my_url);
String protocol = url.getProtocol();

输出看起来像httphttps