3
我運行下面的代碼Java的8,收到致命警報:handshake_failure:javax.net.ssl.SSLHandshakeException
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.JSONObject;
public class HttpPostReq {
public static void main(String args[]) {
String restUrl = "https://connect-testing.urbanairship.com/api/events/";
String username = "sample_connection";
String password = "sample_connection";
JSONObject jsonToSend = new JSONObject();
String jsonData = jsonToSend.toString();
HttpPostReq httpPostReq = new HttpPostReq();
System.out.println(jsonData);
HttpPost httpPost = httpPostReq.createConnectivity(restUrl, username, password);
System.out.println(httpPost);
httpPostReq.executeReq(jsonData, httpPost);
}
HttpPost createConnectivity(String restUrl, String username, String password) {
HttpPost post = new HttpPost(restUrl);
String auth = new StringBuffer(username).append(":").append(password).toString();
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
String authHeader = "Basic " + new String(encodedAuth);
System.out.println(authHeader);
post.setHeader("Authorization", authHeader);
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
post.setHeader("Accept", "application/vnd.urbanairship+x-ndjson; version=3;");
post.setHeader("X-Stream", "true");
return post;
}
void executeReq(String jsonData, HttpPost httpPost) {
try {
executeHttpRequest(jsonData, httpPost);
} catch (UnsupportedEncodingException e) {
System.out.println("error while encoding api url : " + e);
} catch (IOException e) {
System.out.println("ioException occured while sending http request : " + e);
} catch (Exception e) {
System.out.println("exception occured while sending http request : " + e);
} finally {
}
}
void executeHttpRequest(String jsonData, HttpPost httpPost) throws UnsupportedEncodingException, IOException {
HttpResponse response = null;
String line = "";
StringBuffer result = new StringBuffer();
httpPost.setEntity(new StringEntity(jsonData));
HttpClient client = HttpClientBuilder.create().build();
response = client.execute(httpPost);
System.out.println("Post parameters : " + jsonData);
System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
while ((line = reader.readLine()) != null) {
result.append(line);
}
System.out.println(result.toString());
}
}
獲取作爲例外,
IOException異常在發送HTTP請求發生: javax.net.ssl.SSLHandshakeException:收到致命警報: handshake_failure。
我能夠通過捲曲連接,
curl -vv https://connect-testing.urbanairship.com/api/events/ \
--compressed \
-u "sample_connection:sample_connection" \
-H "Accept: application/vnd.urbanairship+x-ndjson; version=3;" \
-d "{}"
誰能告訴我什麼是錯我的Java代碼?
依賴性爲如下,
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
任何解決方案? – shiv
您可以嘗試通過TLSv1.2強制使用TLSv1或TLSv1.1。找到[本頁](http://www.oracle.com/technetwork/java/javase/documentation/cve-2014-3566-2342133.html),其中建議使用'java.lang.System.setProperty(「https.protocols 「,」TLSv1,TLSv1.1,TLSv1.2「);' – mwstc013