Apache CommonsVFS подключается к серверу https - PullRequest
2 голосов
/ 23 сентября 2010

В настоящее время я использую Apache CommonsVFS для загрузки изображений с других сайтов, и это хорошо работает.

На сайте CommonsVFS написано, что он поддерживает протокол HTTPS, но я обнаружил, что не могу получить доступ к этим URL-адресам, начинающимся с https: // с использованием CommonVFS, в то время как я могу просмотреть его из моего Firefox в обычном режиме.

Например, следующий код выдаст исключение, которое говорит о том, что не удалось подключиться к 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 = org.apache.commons.vfs.impl.StandardFileSystemManager@16a0733

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-провайдера для FileManager, но все равно не повезло, он говорит, что схема 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?

1 Ответ

2 голосов
/ 23 сентября 2010

ОК, я обнаружил, что он выдает это исключение, потому что сертификат сайта, к которому я пытаюсь подключиться, не является доверенным для моего хранилища ключей Java.добавьте сертификат в мое хранилище ключей, и теперь все работает нормально.

...