我有一个java文件来执行HttpURLConnection
命令,当我通过命令行执行时,它可以很好地从URL获取数据。
我已经在我的Web应用程序中映射了此活动的URL,当我通过Web UI调用此活动时,此代码工作正常,但HttpURLConnection
命令现在返回空结果。
public static String getData()
{
String str = "";
try{
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) { }
}
};
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier allHostsValid = new HostnameVerifier()
{
public boolean verify(String hostname, SSLSession session)
{
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
URL url = new URL("My URL");
URLConnection con = url.openConnection();
Reader reader = new InputStreamReader(con.getInputStream());
while (true)
{
int ch = reader.read();
if (ch==-1) {
break;
}
str += (char)ch;
} }catch(Exception e){}
return str;
我无法理解导致此行为的原因,请帮我解决此问题。
答案 0 :(得分:1)
这是因为网络浏览器具有适当的安全性,可以保护受保护的网站免遭不必要的查询。这是CORS
政策。
如果域不希望来自外界的传入请求,则此策略可提供此安全性。关闭此策略取决于域。因此,作为客户,您真的无能为力。