0

我正在尝试从服务器下载文件但出现错误

检查了一些我发现需要禁用 dnsresolver 的解决方案,但这对我也不起作用。

这是禁用 dnsresolver 的代码

System.setProperty("vertx.disableDnsResolver", "true");

源代码 :-

WebClientOptions webClientOptions = new WebClientOptions() .setSsl(true)
                .setTrustAll(true)
                .setDefaultPort(443)
                .setKeepAlive(true);
        WebClient webClient = WebClient.create(vertx,webClientOptions);
        final HttpRequest<Buffer> abs = webClient.get("https://downloads.dell.com","/xyz.exe");
        abs.send(responseHandler ->{
            if (responseHandler.succeeded()){
                String temp = vertx.fileSystem().createTempFileBlocking("", "");
                            vertx.fileSystem().writeFileBlocking(temp, responseHandler.result().body());
                        routingContext.response().end("Success");

            }else{
                log.error("Error: {}",responseHandler.cause());
                routingContext.response().end("failure");
            }
        });

这是一个例外:-

 java.net.UnknownHostException: failed to resolve 'https://downloads.dell.com'. Exceeded max queries per resolve 4 
        at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:927) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:886) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:358) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:858) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:358) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:858) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:358) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:858) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:358) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:1001) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:878) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:358) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        at io.netty.resolver.dns.DnsResolveContext.onResponse(DnsResolveContext.java:545) [netty-resolver-dns-4.1.49.Final.jar:4.1.49.Final]
        

更新:- 使用 getAbs() 我可以下载大约 15 到 20 mb 的文件,但如果文件大小超过 500mb 则无法下载

4

2 回答 2

1

WebClient.get(String, String)方法需要一个主机名和一个路径,但您提供一个 URL 作为第一个参数。

如果要使用 URL,请使用以下WebClient.getAbs(String)方法:

final HttpRequest<Buffer> abs = webClient.getAbs("https://downloads.dell.com/xyz.exe");
于 2020-09-28T09:48:16.777 回答
0

它对我来说解决得很好

fun main() {
  val vertx = Vertx.vertx()
  val webClientOptions = WebClientOptions().setSsl(true)
    .setTrustAll(true)
    .setDefaultPort(443)
    .setKeepAlive(true)

  val webClient = WebClient.create(vertx, webClientOptions)
  val abs = webClient.getAbs("https://downloads.dell.com/xyz.exe")
  abs.send().onComplete { println(it.failed()) }.onSuccess { println(it.statusMessage()) }
}

// prints
// false
// Not Found
于 2020-09-26T15:05:47.030 回答