【发布时间】:2020-06-18 15:22:10
【问题描述】:
我聘请了一个向手机发送短信的网络服务。我试图发出发布请求,但我得到了错误:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
网络服务公司向我提供了制作 url 所需的所有信息:用户、密码、所需参数、响应等
gsm 参数是手机号码。 msg 是要发送的消息。
import java.net.HttpURLConnection;
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class Test3 {
public static void main(String[] args) throws Exception {
Test3 obj = new Test3();
System.out.println("Testing 1 - Send Http POST request");
obj.sendPost();
}
private void sendPost() throws Exception {
//
String url = "https://...url/send";//(that url its just an example, its not the real)
HttpsURLConnection httpClient = (HttpsURLConnection) new URL(url).openConnection();
//add reuqest header
httpClient.setRequestMethod("POST");
httpClient.setRequestProperty("User-Agent", "Mozilla/5.0");
httpClient.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
String urlParameters = "?user=TEST_USER&company=XXX&passwd=TEST_PWD&gsm=666000222&type=plus&msg=hello&sender=me";
// Send post request
httpClient.setDoOutput(true);
try (DataOutputStream wr = new DataOutputStream(httpClient.getOutputStream())) {
wr.writeBytes(urlParameters);
wr.flush();
}
int responseCode = httpClient.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);
try (BufferedReader in = new BufferedReader(
new InputStreamReader(httpClient.getInputStream()))) {
String line;
StringBuilder response = new StringBuilder();
while ((line = in.readLine()) != null) {
response.append(line);
}
System.out.println(response.toString());
}
}
}
此外,如果我尝试通过将 url 写入 Mozilla Firefox 的导航栏来访问 web 服务调用,则会收到该错误:
安全连接失败
在连接到“url”时发生错误,SSL 对等方无法协商一组可接受的安全参数。
错误代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT
无法显示您尝试查看的页面,因为无法验证接收到的数据的真实性。
【问题讨论】:
-
听起来像是自签名或过期的 SSL 证书。如果您在浏览器中访问 URL 地址,您会收到任何警告或消息吗?
-
@stdunbar 我添加了浏览器截图
-
您需要深入了解浏览器错误(了解更多链接可能会有所帮助),但无论哪种方式,这都是无效的 SSL 证书。您可能需要联系供应商以查看这是否是预期的。如果是这样,那么您的代码将不得不更改以适应错误的证书。
标签: java api ssl request httpurlconnection