如何让Android应用程序通过HTTPS连接到Heroku应用程序?

时间:2014-02-12 11:47:02

标签: java android ssl heroku

我在Cedar堆栈上有一个Heroku应用程序,它有一个这样的URL:

https://my-app.herokuapp.com/

我正在使用搭载SSL,我没有自己的证书。但这样可以正常工作,我在浏览器中没有看到任何错误/警告。

现在我想让我的Android应用程序安全地连接到这个Heroku应用程序。我尝试的代码如下:

BasicHttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 4000);
HttpConnectionParams.setSoTimeout(httpParameters, 4000);
DefaultHttpClient client = new DefaultHttpClient(httpParameters);
HttpRequestBase httpRequest = new HttpGet("https://my-app.herokuapp.com/api/player");
client.execute(httpRequest);

但这不起作用。我没有看到任何警告,错误或异常,但它只是不通过HTTPS连接而是HTTP。

我做错了什么?

我必须使用其他任何子类吗?我认为只提供HTTPS URL就足够了,我在互联网上发现的一些帖子似乎验证了这一点。

我已经找到了关于使用SSL / TLS hereherehere的HttpClient的答案,但它们并没有真正帮助我。除了我不知道该怎么做之外,我不确定这些答案是否会影响我,因为我没有看到任何暗示证书问题的例外情况。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

 HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
    DefaultHttpClient defaultclient = new DefaultHttpClient();

    SchemeRegistry registry = new SchemeRegistry();
    SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
    socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
    registry.register(new Scheme("https", socketFactory, 443));

    cm = new ThreadSafeClientConnManager(defaultclient.getParams(), registry);
    client = new DefaultHttpClient(cm, defaultclient.getParams());

    // Set verifier     
    HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);             
    post = new HttpPost("https://my-app.herokuapp.com/api/player");