1
回答
访问第三方https接口(忽略证书,对方提示不需要证书)
开发十年,就只剩下这套Java开发体系了   

在测试服务器 第一次请求接口成功后 再次请求接口 时返回:<html>
<head><title>500 Internal Server Error</title></head>
<body bgcolor="white">
<center><h1>500 Internal Server Error</h1></center>
<hr><center>nginx</center>
</body>
</html>,重启服务器,再次请求成功,请问这是什么原因,在本地通过 Java main方法多次请求都ok,就是放在测试服务器上有次问题,测试服务器没有安装nginx,请各位指教

<无标签>
举报
kyzgsky
发帖于1年前 1回/104阅
共有1个答案 最后回答: 1年前

之前也遇到过这问题,main方法可以,其他就不行了~

我是跳过证书


    /**
     * 跳过Https的证书
     */
    public static void disableSslVerification() {
        try
        {
            // Create a trust manager that does not validate certificate chains
            TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }
            };
            // Install the all-trusting trust manager
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            // Create all-trusting host name verifier
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            // Install the all-trusting host verifier
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

因为我用的是Java的Http 请求,不是用HttipClient 

 public static String sendGet(String url){
        // 就是加这一行
        disableSslVerification();

        HttpURLConnection connection = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        try {
            URL getUrl = new URL(url);
            connection = (HttpURLConnection) getUrl.openConnection();
            connection.setConnectTimeout(1000 * 3);
            connection.connect();
            String line = "";
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            return result.toString();
        }catch (SocketTimeoutException e){
            e.printStackTrace();
            return "-1: 连接超时";
        } catch (Exception e) {
            e.printStackTrace();
            return "-2: 连接失败";
        } finally {
            try {
                if (in != null) in.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

在请求方法里,第一行加上跳过证书的方法

--- 共有 1 条评论 ---
kyzgsky我的问题不是如何绕过证书,而是nginx的问题,不过很谢谢你的回复 1年前 回复
顶部