我正在编写一个仅用于与Android Studio进行测试的应用程序。我想使用字符串((strings [0]))请求带有POST参数的服务器。
但是我总是得到这个异常:
javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6f427ff108: Failure in SSL library, usually a protocol error error:1000042e:SSL routines:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSION (external/boringssl/src/ssl/tls_record.cc:587 0x6fa8195d88:0x00000001)
我也尝试了httpok。
https://square.github.io
该服务器可使用 TLSV1.2
[...]
byte[] postData = strings[0].getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
URL url = new URL("https://example.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
//
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
conn.setUseCaches(false);
//
// TLSv1 | TLSv1.1 | TLSv1.2
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, null, new java.security.SecureRandom());
sc.getProtocol();
sc.getSupportedSSLParameters();
sc.getDefaultSSLParameters();
SSLEngine engine = sc.createSSLEngine();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.connect();
try (final InputStream in = conn.getInputStream()) {
//…
}
[...]
我再也没有了。
最佳答案
[...]
byte[] postData = strings[0].getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
URL url = new URL("https://example.com");
// The url has to be set to an international variable
new Thread(new Runnable() {
public void run() {
// The url has to be fetched from an international variable
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
//
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
conn.setUseCaches(false);
//
// TLSv1 | TLSv1.1 | TLSv1.2
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, null, new java.security.SecureRandom());
sc.getProtocol();
sc.getSupportedSSLParameters();
sc.getDefaultSSLParameters();
SSLEngine engine = sc.createSSLEngine();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.connect();
});
}
}).start();
try (final InputStream in = conn.getInputStream()) {
//…
}
[...]
https://developer.android.com/guide/components/processes-and-threads
关于java - Java Android开发 “Failure in SSL library, usually a protocol”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326393/