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.
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