我在Java 8上运行以下代码,
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());
}
}
将异常视为,
发送http请求时发生ioException: javax.net.ssl.SSLHandshakeException:收到致命警报: handshake_failure。
我可以通过curl连接,
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>
答案 0 :(得分:4)
可能是客户端和服务器使用的TLS协议版本或密码套件之间的兼容性问题。