使用Android通过HTTP进行POST请求

时间:2013-02-16 12:30:20

标签: android post ssl https

我遇到了一个大问题。我要从我的应用程序POST一些URL的URL。 但是当我尝试在WebView对象中执行此操作时,它会向我展示一个异常,其中显示“Untrusted Certicate”(该异常由覆盖WebViewClient onReceivedSslError()的方法填充)。我怎样才能与服务器正确握手?你能给我一些提示吗?我疯了......

真的,非常感谢...

编辑:这就是我定义网络视图的方式

webView = (WebView) myFragmentView.findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String string){
            Log.debug(tag, "URL pagina terminata :"+webView.getUrl() );
            if(progress!=null) 
                if(progress.isShowing()){progress.dismiss();}
        }

        @Override
        public void onReceivedError(WebView view, 
                int errorCode,
                String description, 
                String failingUrl) {
            Log.error(tag, "ERROR:" + description );
           }

        @Override
        public void onReceivedSslError(WebView view,
                SslErrorHandler handler, SslError error) {
            super.onReceivedSslError(view, handler, error);
            Log.error(tag, "SSL Error received: "+ error.getPrimaryError());

            handler.proceed();
        }


    });

这就是我在WebView中创建postRequest的方式

webView.postUrl(url, EncodingUtils.getBytes(postParameters, "base64"));

这是LogCat输出:

SSL Error received: 3 - Untrusted Certificate

现在,谷歌搜索了一下我已经看到需要检查证书的有效性并将钥匙串导入本地密钥库。但问题是我不知道从哪里开始...... :)。

1 个答案:

答案 0 :(得分:1)

如果安全性不是优先事项,您可以尝试在handler.proceed()中致电onReceivedSslError(),不要调用super方法。

如果安全是优先事项(它应该是):

我自己没有尝试过webView,但尝试设置这样的证书: Android WebView setCertificate issues SSL problems

要获取实际证书,您可以将它们加载到浏览器中(通过在浏览器中打开URL时接受警告)并从那里导出它们,或者您可以使用如下所述的openssl工具: http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html