0

在 Sardine 中,如何将端口号更改为不同于端口 80(用于 HTTP)和 443(用于 HTTPS)?

用户指南指出我必须“覆盖 SardineImpl#createDefaultSchemeRegistry() 或通过实例化 SardineImpl#SardineImpl(org.apache.http.impl.client.HttpClientBuilder) 来提供您自己配置的 HTTP 客户端实例”但我找不到如何定义端口。

当我使用以下方法实例化 SardineImpl 时:

HttpClientBuilder builder = HttpClientBuilder.create();
SardineImpl sardine = new SardineImpl(builder, "user", "password");
byte[] data;
data = FileUtils.readFileToByteArray(new File("test.txt"));
sardine.put("http://webdav-server:8095/projects/", data);

我得到:

org.apache.http.NoHttpResponseException: webdav-server:8095 failed to respond

服务器可通过浏览器访问,因此问题一定出在端口的定义上,我找不到有关如何执行此操作的示例。

有人可以帮我吗?提前致谢。

4

1 回答 1

2

这是我绞尽脑汁寻找解决方案后得出的结论。希望它可以帮助别人:

HttpClientBuilder builder = new HttpClientBuilder(){
  @Override
  public CloseableHttpClient build() {
    SchemePortResolver spr = new SchemePortResolver() {
      @Override
      public int resolve(HttpHost httpHost) throws UnsupportedSchemeException {
          return 8443; // SSL port to use
      }
  };

  CloseableHttpClient httpclient = HttpClients.custom()
      .useSystemProperties()
      .setSchemePortResolver(spr)
      .build();
  return httpclient;
}
};

Sardine sardine = new SardineImpl(builder, "user", "passwd");

List<DavResource> resources = null;

resources = sardine.list("https://ftp-site.com/path/");
resources.forEach(resource -> {
  System.out.println(resource.getName());
}

希望对某人有所帮助。

于 2016-07-23T06:54:07.007 回答