【问题标题】:Vertx not able to resolve host and not able to download large file using webclientVertx 无法解析主机,也无法使用 webclient 下载大文件
【发布时间】:2021-01-12 15:21:30
【问题描述】:

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

检查了一些我发现需要禁用 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 的文件,但如果文件大小超过 500 mb 则无法下载

【问题讨论】:

    标签: webclient vert.x vertx-httpclient


    【解决方案1】:

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

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

    final HttpRequest<Buffer> abs = webClient.getAbs("https://downloads.dell.com/xyz.exe");
    

    【讨论】:

    • 谢谢@tsegismont,请问我不能下载超过500MB的文件的原因,有没有办法通过webclient下载超过500MB的文件
    【解决方案2】:

    它对我来说很好解决

    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
    

    【讨论】:

    • get call有什么问题吗,我还是遇到同样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2021-02-09
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多