使用Java发生奇怪的HTTP 403错误

时间:2014-02-26 13:22:26

标签: java rest jersey

我在HTTPS上使用公共(无身份验证)RESTful Web服务: https://api.kraken.com/0/public/Time

如果我通过谷歌浏览器或高级REST客户端(Chrome插件)发出简单的GET请求,一切正常。

如果我使用Java,我会得到 HTTP 403错误。 我用HttpsUrlConnection和Jersey试过了 - 同样的问题。

String response = Client.create().resource("https://api.kraken.com/0/public/Time").get(String.class);

有什么想法吗?无法确定HTTP请求在Java / Jersey和高级REST客户端之间的差异。

2 个答案:

答案 0 :(得分:0)

如果在使用HTTPS URL连接时禁止请求,请检查SSL验证是否已通过。在java中,您可以使用

绕过此SSL验证HttpsURLConnection
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager()
    {
        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers()
        {
            return null;
        }

        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
        {
        }

        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
        {
        }
    } };

    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

答案 1 :(得分:0)

您使用的是哪种版型的球衣?你在拉进正确的进口吗?

以下适用于球衣2.5:

String response = ClientBuilder.newClient()
  .target("https://api.kraken.com/0/public/Time")
  .request(MediaType.APPLICATION_JSON).get(String.class);

这让我感觉像是:

  

{“error”:[],“result”:{“unixtime”:1393441220,“rfc1123”:“Wed,26 Feb 14 19:00:20 +0000”}}