使用groovy的toURL方法忽略SSL错误

rah*_*ver 5 java ssl grails groovy

我正在尝试使用toURL()grails中的groovy 方法发出http请求:

def holidayApiUrl = "https://holidayapi.com/v1/holidays?key=${apiKey}&year=2016&country=US"

def holidayJson = JSON.parse(holidayApiUrl.toURL().text)
Run Code Online (Sandbox Code Playgroud)

您可以从holidayapi.com获取api密钥以复制此错误.

以上要求给出

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找在groovy中完全使用这种方法来忽略ssl错误的方法.但是无法得到它.

其他SO帖子建议的东西像这样,但常规的的toURL不使用的SSLContext.那么可以使用toURL()忽略ssl错误吗?

编辑:

任何想要测试上面代码片段的人都可以免费注册holidaypi.com并获取api密钥.在浏览器中命中时,上面的url(用api键替换)给出了正确的json.但是上面的代码在groovy中执行时会出现SSL错误.

Nae*_*dov 7

就在你打电话之前

def holidayJson = new JsonSlurper().parse(holidayApiUrl)
Run Code Online (Sandbox Code Playgroud)

尝试执行以下操作(这会创建并注册替代 TrustManager):

import javax.net.ssl.SSLContext;
import javax.net.ssl.X509TrustManager;
import javax.net.ssl.HttpsURLConnection;

class TrustManager implements X509TrustManager {
  public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null;  }
  public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { }
  public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { }
}

TrustManager[] trustAllCerts = new TrustManager[1]
trustAllCerts[0] = new TrustManager()
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
Run Code Online (Sandbox Code Playgroud)