我已经编写了一些代码来从网站下载文件。该代码适用于测试http网址。然后,只要我将URL更改为https,我就会有一个连接超时。
System.setProperty("http.proxyHost","trproxy.rwe.com") ;
System.setProperty("http.proxyPort", "80") ;
Authenticator.setDefault (new MyAuthenticator("USER","PW"));
//URL url = new URL("http","www.treasury.gov",80,"/ofac/downloads/sdn.csv",new sun.net.www.protocol.http.Handler()); THIS WORKS
URL url = new URL("https", "downloads.elexonportal.co.uk",443,"/bmradataarchive/download?key=MYKEY&filename="+filename,new sun.net.www.protocol.https.Handler());
url.openConnection();
InputStream reader = url.openStream();
FileOutputStream writer = new FileOutputStream("C:/downloads/"+filename);
如果我将https网址复制到浏览器中,系统会询问我希望保存文件的位置,并且工作正常。任何帮助非常感谢。我试过this但没有用
由于 克里斯
答案 0 :(得分:4)
您可能遇到证书问题。这通常是我在Java中使用HTTPS连接时遇到的问题。
首先,您应该检查并查看您尝试连接的URL是否由知名的受信任根CA签署了证书,并且有效(未过期)。
我建议您在浏览器中打开网址并查看证书信息。
仅供参考,您的浏览器识别的受信任的根CA与Java识别的受信任的根CA之间可能存在脱节。这是另一个关于如何获得Java认可的Stackoverflow问题:How can I get a list of trusted root certificates in Java?
如果这是一个自签名证书,那么您需要了解有关将其导入和使用本地密钥库的问题。有很多网站和博客可以指导您完成此操作,这里有一个这样的博客(不是我的):Adding self-signed https certificates to java keystore
此外,在使用浏览器进行测试时,这将帮助您验证没有代理问题。您一定要检查浏览器的设置,以确定您是否要通过代理服务器。
你一定要考虑使用HttpClient而不是java.net.URL。这是Apache page for HttpClient 4.2.1。
最后,如果您希望通过HTTP或HTTPS进行文件传输,您可能需要考虑WebDAV。
我过去曾使用Jakarta Slide WebDAV Client。不幸的是,它看起来像Slide is retired at this point,但您可以通过一些搜索找到替代品。
ADDITION
我复制了你的源代码示例并更仔细地查看了它。看起来您为http设置了属性,但没有为https设置属性。
HTTPS具有单独的属性:
尝试设置:
System.setProperty("https.proxyHost","trproxy.rwe.com") ;
System.setProperty("https.proxyPort", "443") ;
请参阅Oracle's Java Networking and Proxies上的第2.2节。
http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html
答案 1 :(得分:1)
看起来您的问题可能与代理有关。它还应该支持https。 此外,您应该使用HttpClient 4来下载文件,它是一个用于建立http连接的成熟库。
答案 2 :(得分:0)
System.setProperty("http.proxyPort", "80")
应为System.setProperty("http.proxyPort", "443")