gpt4 book ai didi

java - 对 https endint 的 curl 请求正常工作,但 java 客户端请求失败,错误为 'javax.net.ssl.SSLHandshakeException'

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:56 26 4
gpt4 key购买 nike

我正在尝试通过使用 Java 客户端发出 GET 请求来连接到 https 端点。端点是这样的'https://domain/path/ {token}',但每次我提出请求时,我都会得到 'javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure' 异常,我搜索了很多网站,但没有运气。有趣的是,当我从不同的主机(Windows)通过 POSTMAN 发出相同的请求时,它工作正常,我还复制了从 POSTMAN 生成的 curl 命令并在我的客户端运行的主机上运行,​​它在那里也工作正常。只有 java 代码无法连接到端点。现在我的问题是:
--->这是证书问题吗?
---> 如果是这样,curl 如何在不需要证书的情况下工作。

谢谢。

注意:以下是已经尝试过的事情:
--> 为 java 客户端连接设置与 curl 命令相同的一组 header 。
--> 还使用了替代的其余客户端 (okhttp3) 和 HttpClient 库,但得到相同的异常。

请在下面找到有效的 curl 命令:

curl -X GET \
https://domain/x/y/XUwDummyTokenRKZ80EnxDCJlM \
-H 'Accept: */*' \
-H 'Cache-Control: no-cache' \
-H 'Connection: keep-alive' \
-H 'Host:hostname' \
-H 'accept-encoding: gzip, deflate' \
-H 'cache-control: no-cache

还有用于连接到 https 端点的 java 客户端代码:

 public void printGetResult( String destUrlStr ) {
try {
URL url = new URL(destUrlStr);
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setRequestMethod( "GET" );

InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

String inputLine;

while ((inputLine = br.readLine()) != null) {
System.out.println(inputLine);
}

br.close();


}catch(Exception e) {
System.out.println("exception is"+e);
}

}

预期结果:json
(我知道在我的 curl 请求中我已将 accept 设置为 * ,但它有效)
实际结果:

javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

最佳答案

您必须将远程服务器证书添加到 java's Truststore .有几种方法可以做到这一点。 Here就是一个例子。

关于java - 对 https endint 的 curl 请求正常工作,但 java 客户端请求失败,错误为 'javax.net.ssl.SSLHandshakeException',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56213591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com