Java 发送Base64位图并间歇获取ProtocolException
我已经构建了一个Android应用程序,我正在使用它向我们的服务器发送一张相机拍摄的图像。我使用以下代码将位图转换为Base64字符串视图:Java 发送Base64位图并间歇获取ProtocolException,java,android,exception,mobile,sslhandshakeexception,Java,Android,Exception,Mobile,Sslhandshakeexception,我已经构建了一个Android应用程序,我正在使用它向我们的服务器发送一张相机拍摄的图像。我使用以下代码将位图转换为Base64字符串视图: ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOS); return Base64.encodeToString(byteArrayOS.toByteArra
ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOS);
return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT);
现在我实际上遇到了一些问题,其中一个是我会间歇性地得到一个SSLHandshakeException,但它不是每次都发生,所以我非常困惑,我尝试了许多不同的角度来解决这个问题,从StackOverflow可能的解决方案,但似乎没有任何效果
确切的例外是
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x601201b8: Failure in SSL library, usually a protocol error
错误:14077410:SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报握手失败(外部/openssl/SSL/s23\u clnt.c:742 0x5d066d74:0x00000000)
有时它似乎确实有效,但我无法确定是什么因素让它起作用还是不起作用。我还认为在某个时候可能会出现超时问题,所以我将HttpsURLConnection的超时限制设置为任意大的数字,例如
secureConnection = (HttpsURLConnection) url.openConnection();
secureConnection.setConnectTimeout(100000);
HttpURLConnection.setFollowRedirects(false);
secureConnection.setRequestMethod(requestType.toString());
secureConnection.setRequestProperty("Content-Type", contentType.toString());
secureConnection.setConnectTimeout(3000);
secureConnection.setReadTimeout(3000);
secureConnection.setDoInput(true);
secureConnection.setDoOutput(true);
我尝试的另一个解决方案是尝试接受所有证书,以防我的设备拒绝服务器证书
其他一些信息是,我正在安卓4.4设备上测试,并使用最新的安卓Studio版本。如果这是持续发生的事情,我会确切地知道什么是错误的,但它只会偶尔发生:(但这是一种痛苦,因为我无法克服它。您是否能够将任何数据发送到服务器?例如,它有时会起作用吗?此外,您能否为整个异常提供消息和堆栈?