https错误总结
1.javax.net.ssl.SSLHandshakeException:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
?
原因:服务器的证书不被信任。一般是这样造成的。
?
解决办法,
1.导入办法:
打开命令行窗口,并到<java-home>\lib\security\ 目录下,运行下面的命令:
?
也有可能是证书的问题。
?
5.?java.net.UnknownHostException
?
服务端地址不对。
?
6.java.net.SocketException: Unexpected end of file from server
?
这个异常说明数据已经发送成功。有可能服务端是防火墙的原因,没有处理客户端发来的数据。也有可能是客户端的数据不符合要求,服务端没有做出响应。数据不符合要求可能是传送的数据含有奇怪的字符。也有可能是两边编码不一致导致。客户端将字符串变成字节数据传送时需要指定编码格式,如str.getBytes("UTF-8");如不指定,可能导致上面的错误。另外有人说当URL过长时也会发生此错误,当使用URL发送数据时,可以参考此意见。
?
在我们与平安做接口时,碰到这个Unexpected end of file from server诡异的错误。但大致原因可以确定是服务端(平安)对我们发送过去的数据没有处理。具体的原因有下:
我们的系统是UTF-8编码的,他们是GBK编码的。编码不一致导致错误。另外传输消息时最好设定编码格式,如str.getBytes("UTF-8")。
但这样处理后还是出问题。那就是测试环境可以成功,而线上环境不能成功。查了很久也查不到原因,最后弄一个和测试环境一样的服务器,专门来放接口才解决问题。
?
对于最后这个问题,可能原因如下:
a. 线上环境做了某种限制,使证书信息不能发送出去。
b。线上环境的外网出口IP和测试环境外网出口IP不同。或许平安会将第一次发送证书时,IP和证书记住。如果下次IP和证书有一项不符合,则认为无效,不给回应。我们先在测试环境上发送成功,平安记住了IP和证书。然后在线上环境发送时,由于IP不同,平安认为证书无效,不给回应。
?
?
7.java.io.IOException:server returned HTTP response code :500
?
?
这个异常是服务端代码的问题。服务端相应代码执行时抛出了异常。
?
?
最后 如果返回的状态码是200 ,表示成功。