如何在Android中同时使用HTTPS和HTTP解析JSON数据?

3

我按照这里的方法在Android中解析JSON数据。

使用HttpData handler,我已经成功地完成了它。

现在我想在HTTPS的部分中使用这个。请问有人能告诉我如何在代码中进行最小更改而实现这一点吗?因为在我的应用程序中,我需要在多个活动中进行这项操作。请建议我如何在我的代码中使用HTTPs

我将提供额外的信息...根据响应情况...

更新 我在代码中将HttpURLConnection更改为HttpsURLConnection

请建议我如何处理代码中的错误。

更新 1

我已经在服务器端更改了证书。现在它可以在HTTPS上运行了。

但现在,我想在同一个应用程序中同时使用HTTP和HTTPS,具体取决于客户需求。现在它在HTTPS下运行。但我也需要在代码中使用HTTP。有人可以为我提供建议吗?我希望我的应用程序既支持HTTP又支持HTTPS。


Https与http不同,它是安全的并使用SSL。 - Nitesh
最近我的服务器更改为Https...所以我想在我的活动中使用Https...我对JSON不熟悉,请建议我如何在我的活动中使用Https而不进行任何重大更改...如果可能的话,请给我一个例子...如果我提供我的Url,我会收到SSL错误...因为我正在使用http数据处理程序...请为Https提供建议...附带示例代码。 - Don't Be negative
请阅读https://dev59.com/CJLea4cB1Zd3GeqPxxYP#34325483,看看它是否有帮助。 - BNK
感谢大家,我已经为你们所有人的回答点赞了。 - Don't Be negative
4个回答

3
为了同时使用HTTP和HTTPS,您需要拥有这两种方法(我认为您已经拥有它们)。
  1. GetHTTPData(String urlString)获取HTTP数据的方法
  2. GetHTTPSData(String urlString)获取HTTPS数据的方法
现在,在HTTPDataHandler类中(其中包含上述两种方法),您需要创建第三个方法GetDataFromUrl(),该方法将检查URL并决定使用哪种方法(HTTP或HTTPS)。
public String GetDataFromUrl(String url){
    if(url.toLowerCase().startsWith("https")){
        //HTTPS:
        return GetHTTPSData(url);
    }else{
        //HTTP:
        return GetHTTPData(url);
    }
}

现在在AsyncTask类ProcessJSON中,

请将这一行stream = hh.GetHTTPData(urlString);替换为stream = hh.GetDataFromUrl(urlString);

如果您不想在HTTPDataHandler中添加第三种方法,请在ProcessJSONdoInBackground()中使用if语句调用其中的一种方法(http或https)。


1

您可以使用HttpsURLConnection,将HttpURLConnection替换为HttpsURLConnection。

   public String GetHTTPData(String urlString){
        try{
            URL url = new URL(urlString);
            HttpsURLConnection urlConnection =(HttpsURLConnection)url.openConnection();

            // Check the connection status
            if(urlConnection.getResponseCode() == 200)
            {
                // if response code = 200 ok
                InputStream in = new BufferedInputStream(urlConnection.getInputStream());

                // Read the BufferedInputStream
                BufferedReader r = new BufferedReader(new InputStreamReader(in));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = r.readLine()) != null) {
                    sb.append(line);
                }
                stream = sb.toString();
                // End reading...............

                // Disconnect the HttpURLConnection
                urlConnection.disconnect();
            }
            else
            {
                // Do something
            }
        }catch (MalformedURLException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }finally {

        }
        // Return the data from specified url
        return stream;
    }

请检查我的代码:http://android--examples.blogspot.in/2015/05/how-to-parse-json-data-in-android.html,并在其中更新您的答案。 - Don't Be negative
先生,我遇到了这个错误:“javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.” 但是当我在电脑上的Firefox浏览器中输入相同的URL时,我得到了“您的连接不安全”的提示,之后允许后我就得到了结果。但现在我该怎么办呢?您的答案可能有效,但服务器没有响应。请帮帮我,先生... - Don't Be negative
请查看此网址,或许能帮到您: http://developer.android.com/training/articles/security-ssl.html#CommonProblems - Shripad Jadhav
谢谢@Shripad Jadhav,现在请检查我的更新问题。 - Don't Be negative

1
我理解的是在您的服务器端使用了自签名 SSL 证书。因此,您还需要在 Android 设备上安装该证书。路径为:设置 > 安全 > 从存储安装。但是,对于生产版本,您需要从 CA 机构购买 SSL 证书。 希望这能解决您的问题。

谢谢@Ankur Samarya,我已经解决了与CA机构有关的问题。请检查我的更新问题。用于使用HTTPS和HTTP两者的方法。 - Don't Be negative

1
在doInBackground中删除HttpDataHandler行,直接使用HttpUrlConnection或在JSONparse类中使用HttpUrlConnection来向服务器发送参数,请按照此教程Website发送参数。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接