【问题标题】:Vertx WebClient SSL redirect failsVertx WebClient SSL 重定向失败
【发布时间】:2017-05-10 23:44:45
【问题描述】:

我正在尝试连接到需要 api 密钥的第 3 方 API。使用传统的 HttpURLConnection 可以正常工作...我得到 200 响应

HttpURLConnection connection = (HttpURLConnection) new URL("https://www.server.com/download?apikey=<MY_KEY>"

但是,当使用 Vertx WebClient (io.vertx.ext.web.client.WebClient) 我总是得到 403 Forbidden

webClient = WebClient.create(vertx, new WebClientOptions());
webClient.get("/download")
.addQueryParam("apikey", "<MY_KEY>")
.ssl(true)
.host("www.server.com")
.port(443)
.send(downloadFileHandler ->
{

经调查,原因似乎是因为 API 正在重定向到另一个 URL,原始 URL 和重定向都使用 SSL。不知何故,Vertx Web 客户端没有维护握手。

【问题讨论】:

  • 这个问题可以通过与两个独立的 WebClient 实例建立两个连接来解决,第一个连接到原始 URL 并将 followRedirects 设置为 false 以允许读取标头以获取重定向 URL。然后向重定向 URL 发出单独的请求以进行实际下载。但这并不理想。

标签: java webclient vert.x


【解决方案1】:
//WebClientOptions webClientOptions = new WebClientOptions();
WebClient client = WebClient.create(vertx, webClientOptions);
WebClientSession session = WebClientSession.create(client);
session.getAbs(url).send(response -> {
    if (response.succeeded()) {
        HttpResponse<Buffer> httpResponse = response.result();
        System.out.println(" -> Response Code : " + httpResponse.statusCode());
        promise.complete(httpResponse.bodyAsJsonObject());
    } else {
        promise.fail(response.cause());
    }
});

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
猜你喜欢
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 2018-01-21
  • 2020-06-03
  • 2020-04-10
  • 2021-08-17
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多