如何处理错误"主机名未经验证"在android中

时间:2014-07-23 09:06:05

标签: java android android-asynctask

我一直在尝试通过连接到服务器https://mobile.twitter.com/来测试互联网连接。

出于这个原因,我使用了AsyncTask如下:

class CheckInternetConnection extends AsyncTask<Void, Void, Boolean>{
        @Override
        protected void onPostExecute(Boolean result){
            if(result)
                //do stuff
            else
                //do stuff
        }
        @Override
        protected Boolean doInBackground(Void... params) {
            try {
                HttpURLConnection urlc = (HttpURLConnection) (new URL("https://mobile.twitter.com/").openConnection());
                urlc.setConnectTimeout(1500); 
                urlc.connect();
                return (urlc.getResponseCode() == 200);
            } catch (IOException e) {
                Log.e(LOG_TAG, "Error checking internet connection", e);
            }
            return false;
        }
    }

问题是我收到了错误

07-23 11:09:24.310: E/(14596): java.io.IOException: Hostname 'mobile.twitter.com' was not verified
07-23 11:09:24.310: E/(14596):  at libcore.net.http.HttpConnection.verifySecureSocketHostname(HttpConnection.java:223)
07-23 11:09:24.310: E/(14596):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:446)
07-23 11:09:24.310: E/(14596):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
07-23 11:09:24.310: E/(14596):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
07-23 11:09:24.310: E/(14596):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
07-23 11:09:24.310: E/(14596):  at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165)
07-23 11:09:24.310: E/(14596):  at com.bledi.android.twittertest.TwitterActivity$CheckInternetConnection.doInBackground(TwitterActivity.java:83)
07-23 11:09:24.310: E/(14596):  at com.bledi.android.twittertest.TwitterActivity$CheckInternetConnection.doInBackground(TwitterActivity.java:1)
07-23 11:09:24.310: E/(14596):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-23 11:09:24.310: E/(14596):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-23 11:09:24.310: E/(14596):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-23 11:09:24.310: E/(14596):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-23 11:09:24.310: E/(14596):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-23 11:09:24.310: E/(14596):  at java.lang.Thread.run(Thread.java:856)

如何验证主机名?

1 个答案:

答案 0 :(得分:0)

最有可能的是,该网站使用的是不受Android信任的证书。如果您想自己安装缺少的根证书,这个答案可能会有所帮助: How to install trusted CA certificate on Android device?