gpt4 book ai didi

java - HttpURLConnection 抛出 java.net.SocketTimeoutException : SSL handshake timed out in Android 4. 1.1

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:04 27 4
gpt4 key购买 nike

我的代码在 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();
}
}

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

最佳答案

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

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

一个简单的库,用于信任自签名或未正确签名的域。但在你的情况下,我认为只为你的域设置一个异常(exception)并且不检查特定 sdk 级别下的认证会很方便。

此代码库使用 TrustManager 为某些证书/域设置异常(exception)。如果您要使用它,请确保正确使用它,因为 Google Play 可能不会接受您的应用程序更新/发布。

请参阅我在 this 上的回答其他问题。

关于java - HttpURLConnection 抛出 java.net.SocketTimeoutException : SSL handshake timed out in Android 4. 1.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889933/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com