当前位置: 首页 > 知识库问答 >
问题:

HttpURLConnection抛出Java . net . sockettimeoutexception:Android 4 . 1 . 1中SSL握手超时

翟青青
2023-03-14

我的代码在 Android 5.0 及更高版本中运行时运行正常。但是在Android 4.1.1中,它会抛出java.net.SocketTimeoutException:SSL握手超时。

    URL url;
    HttpURLConnection connection = null; 
    String charset = "UTF-8";

    String accessToken = "";

    try {

        ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
        postParameters.add(new BasicNameValuePair("client_id", CLIENT_ID));
        postParameters.add(new BasicNameValuePair("client_secret", CLIENT_SECRET));
        postParameters.add(new BasicNameValuePair("grant_type", CLIENT_CREDENTIALS_GRANT_TYPE));

        //Create connection
        url = new URL(ACCESS_TOKEN_URL);
        connection = (HttpURLConnection)url.openConnection();
        connection.setReadTimeout( 10000 /*milliseconds*/ );
        connection.setConnectTimeout( 15000 /* milliseconds */ );
        connection.setInstanceFollowRedirects(false);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //Send request
        DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
        wr.write(getQuery(postParameters).getBytes(charset));
        wr.flush();
        wr.close();

        int responseCode = connection.getResponseCode();
        InputStream is = null;

        if(responseCode==HttpStatus.SC_OK) {
            is = connection.getInputStream();
        }
        else{
            is = connection.getErrorStream();
        }

        Log.d(TAG, "responseCode: "+responseCode);

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

        is.close();
        reader.close();

        String jsonResult = sb.toString();
        JSONObject jsonObject = new JSONObject(jsonResult);

        if(responseCode==HttpStatus.SC_OK){
            accessToken = jsonObject.getString("access_token");
            SettingsPreference.setAccessToken(accessToken);
            Log.d(TAG, "access token: "+accessToken);
        }
        else {
            accessToken = null;
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {

        if(connection != null) {
          connection.disconnect(); 
        }
    }

我已经做了很多研究,这很令人沮丧。我做错了什么?这是服务器问题吗?非常感谢你的帮助。

共有1个答案

胡鸿志
2023-03-14

在较低的sdk级别上使用TrustManager?

受信任的认证在旧设备上可能不是最新的。如果设备低于某个 sdk 级别,则可以尝试实现和使用 SimpleTrust。

一个简单的库,用于信任自签名或未正确签名的域。但在你的情况下,我认为只为你的领域破例,不检查特定sdk级别下的认证会很方便。

此回购使用TrustManager对某些证书/域进行例外处理。如果您要使用它,请确保正确使用它,因为Google Play可能不会接受您的应用程序更新/发布。

请参阅我对另一个问题的回答。

 类似资料:
  • 堆栈:React,NGINX 1.14.0,GUnicorn,Django 2.2.8,Python 3.6.9 错误: 在浏览器:当React调用Django API(当然在请求头中有)时,大约30秒后在浏览器控制台出现CORS错误。 在浏览器控制台:CORS策略阻止从源“https://mydomain”访问“https://mydomain:8000/somethy/”处的XMLHttpRe

  • 我正在学习SSL通信,我遇到了这个问题。我正在编写一个简单的客户端,它试图与本地apache服务器握手。服务器启用https。我将服务器证书添加到所有可能的信任存储(jdk中的一个 注意:我从以下教程中获取了代码: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#KRB 停留

  • 我通过受ssl v3保护的cxf使用soap服务。我从服务器下载.cer文件,并通过keytool使用以下指令创建JKS文件: 在java代码中,我将此代码用于客户端配置: 对于调用此代码的服务: 当我运行代码时,会发生此错误: 我搜索此错误,我意识到该错误是针对不良信任存储的。但我不知道如何生成正确的信任库。

  • 我尝试为Dovecot启用SSL。因此,我使用OpenSSL生成/安装证书。但是当我试图测试conncection时,客户机报告错误。也许有人能帮我。指引我正确的方向? 命令行输入:openssl s_client-connect localhost:pop3s 结果/错误: Dovecot版本:2.0.9 Openssl版本:1.0.1e-FIPS2013年2月11日 SSL的Dovecot配置

  • 我正在尝试连接安装在OSX机器中的贾斯珀软件工作室5.5中在SSL下运行的贾斯珀服务器5.5。我收到错误: javax . net . SSL . SSL handshake异常:sun . security . validator . validator异常:PKIX路径构建失败:sun . security . provider . cert path . suncertpathbuilder

  • 我已经创建了自己的私有注册表(私有注册表),但我无法将图像推送到它。比我得到以下错误: 正在运行的注册表的日志显示以下内容: 我无法卷曲我的注册表(超时)。以下是我执行的步骤: 首先,我创建了自签名证书: 我已创建注册表,它将使用以下证书: 我授予了正确的权限: 我创建了:,并复制了我的在它里面。我编辑了我的并添加了:(我的内部ip和注册表名) 我还重新启动了docker和我的注册表。 编辑:

  • 我最近从AWS ELB转到HAProxy。我正在负载平衡器(HAProxy 1.5dev19)上终止SSL。 自从切换以来,我一直在HAProxy日志中遇到一些SSL连接错误(占请求总数的5-10%)。有三种类型的错误重复:SSL握手期间连接关闭SSL握手期间超时SSL握手失败(这种情况很少发生) 我使用的是免费的StartSSL证书,所以我的第一个想法是一些主机在接受该证书时遇到了问题,我过去没

  • 我试图从这个网址下载图像: https://hme_player_pictures.s3.amazonaws.com/test-512813ed3b83286c72f376c7-thumb100.jpg 这里是堆栈跟踪: 代码: 无法理解它为什么抛出NullPointerException。以上url在浏览器中确实有效。