记一次开发https请求报错问题

it2022-05-09  25

写好了https请求案例后,测试报如下错误:
18:26:46.071 [main] DEBUG org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-0: Shutdown connection 18:26:46.071 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - Connection discarded 18:26:46.072 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {s}->https://api.weixin.qq.com:443][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20] 18:26:46.072 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection manager is shutting down 18:26:46.072 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection manager shut down Exception in thread "main" javax.net.ssl.SSLHandshakeException: Could not generate secret at sun.security.ssl.DHCrypt.getAgreedSecret(Unknown Source) at sun.security.ssl.ClientHandshaker.serverHelloDone(Unknown Source) at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) at sun.security.ssl.Handshaker.processLoop(Unknown Source) at sun.security.ssl.Handshaker.process_record(Unknown Source) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) at com.welink.oil.utils.HttpUtils.doGet(HttpUtils.java:126) at com.welink.oil.utils.HttpUtils.main(HttpUtils.java:161) Caused by: java.security.NoSuchAlgorithmException: Algorithm DiffieHellman not available at javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:184) at sun.security.ssl.JsseJce.getKeyAgreement(Unknown Source) ... 23 more

网上百度了很多方法,都不管用,最后看到了这样一份博客(原址见文末),启发了自己,解决方法如下:

在eclipse的preferences->java->installed->add

把自己的安装的jre目录和jdk目录都添加进来,如下图

选中jdk为默认

 然后修改项目中的build path

右键选中项目->properties->Libraries  修改为刚才添加的jdk 

然后在运行项目,请求https就没有问题了,可以正常返回

 

参考博文地址:https://blog.csdn.net/depinhu/article/details/84355784

 


最新回复(0)