Flux java.net.URL.openStream () incomplet


J'utilise java.net.URL.openStream() pour accéder à une ressource HTTPS. Le flux renvoyé est incomplet pour certaines URL: pour l'exemple ci-dessous, il donne un fichier de 1 105 724 octets alors que la même URL accessible depuis un navigateur donne un fichier de 5 755 858 octets (même lors de la "désactivation" Content-Encoding).

Et il ne lève même pas d'exception.

Qu'est-ce qui me manque?

import static java.nio.file.Files.copy;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Paths;

public class Test {
  public static void main(String... args) throws IOException {
    try (final InputStream in = new URL(
        "https://upload.wikimedia.org/wikipedia/commons/9/95/Germany_%28orthographic_projection%29.svg").openStream()) {
      copy(in, Paths.get("germany.svg"));
    }
  }
}

Modifier

J'ai testé ce code plusieurs fois (sur différents réseaux, mais toujours sur JRE 1.8.0_60 / Mac OS X 10.11.4), et parfois, c'est soudainement "commencer à travailler".

Cependant, passer à une autre de mes URL problématiques (par exemple "https://upload.wikimedia.org/wikipedia/commons/c/ce/Andorra_in_Europe_%28zoomed%29.svg") me permet de reproduire le problème.

Cela signifie - t-il qu'il s'agit d'un problème de serveur? Je ne l'ai jamais vu sur un navigateur bien.

Author: Julien Royer, 2016-05-10

1 answers

Ça marche bien.

Comme d'autres l'ont suggéré, il peut y avoir un problème avec votre réseau, essayez de vous connecter à un autre réseau.

package test;

import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class TestMain2 {
    public static void main(String[] args) {
        System.out.println("Started");

        try (final InputStream in = new URL(
                "https://upload.wikimedia.org/wikipedia/commons/9/95/Germany_%28orthographic_projection%29.svg")
                        .openStream()) {

            Path outputFile = Paths.get("test.svg");

            Files.copy(in, outputFile, StandardCopyOption.REPLACE_EXISTING);

            System.out.println("Output file size : " + outputFile.toFile().length());

            System.out.println("Finished");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Sortie

Started
Output file size : 5755858
Finished
 -2
Author: 11thdimension, 2016-05-10 16:49:30