2010-09-23 68 views
2

目前我使用的Apache CommonsVFS抓取其他网站的图像和它工作得很好。阿帕奇CommonsVFS连接到https服务器

CommonsVFS的网站表示它支持HTTPS协议,但我发现我无法访问那些以https://开始使用CommonVFS的URL,而我通常可以通过我的Firefox访问browse it

例如,下面的代码将产生一个异常说无法连接到HTTP服务器..

scala> import org.apache.commons.vfs.VFS             
import org.apache.commons.vfs.VFS 

scala> val fsManager = VFS.getManager(); 
fsManager: org.apache.commons.vfs.FileSystemManager = [email protected] 

scala> val file1 = fsManager.resolveFile ("http://bone.twbbs.org.tw/Images/desk.jpg") 
file1: org.apache.commons.vfs.FileObject = http://bone.twbbs.org.tw/Images/desk.jpg 

scala> val file2 = fsManager.resolveFile ("https://na.archives.gov.tw/archives/chinese/98/search/popup.jsp?res=/export/home/xdcm/do/ScaleDoFiles/jpg/00/00/01/21/07/A313480000K=0089=577=1=1=003=0002-i.jpg") 
org.apache.commons.vfs.FileSystemException: Could not connect to HTTP server on "na.archives.gov.tw". 
    at org.apache.commons.vfs.provider.http.HttpClientFactory.createConnection(HttpClientFactory.java:105) 
    at org.apache.commons.vfs.provider.http.HttpFileProvider.doCreateFileSystem(HttpFileProvider.java:81) 
    at org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:81) 
    at org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:62) 
    at org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:641) 
    at org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:602) 
    at org.apache.commons.vfs.impl.DefaultFileS... 

我也尝试添加HTTPS提供商文件管理器,但仍然有没有运气,它说URL方案“HTTPS”已被注册。

scala> fsManager.asInstanceOf[org.apache.commons.vfs.impl.StandardFileSystemManager].addProvider("https", new org.apache.commons.vfs.provider.https.HttpsFileProvider) 
org.apache.commons.vfs.FileSystemException: Multiple providers registered for URL scheme "https". 
    at org.apache.commons.vfs.impl.DefaultFileSystemManager.addProvider(DefaultFileSystemManager.java:174) 
    at org.apache.commons.vfs.impl.DefaultFileSystemManager.addProvider(DefaultFileSystemManager.java:152) 
    at .<init>(<console>:8) 
    at .<clinit>(<console>) 
    at RequestResult$.<init>(<console>:9) 
    at RequestResult$.<clinit>(<console>) 
    at RequestResult$scala_repl_result(<console>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at scala.tools.nsc.Interpr... 

那么,我该如何使用commonVFS访问https服务器呢?

回答

2

OK,我发现它抛出此异常,因为这是我尝试连接网站的证书没有我的Java密钥库信任。

我跟着instruction here将证书添加到我的密钥库中,现在一切正常。