Maison >Java >javaDidacticiel >Quelques idées sur les raisons pour lesquelles getContentLength() est toujours -1 dans le téléchargement JAVA
如果Content Length 在头文件中没有描述 |
Il n'y a pas encore de solution
如果Content Long在头文件中有描述 |
Option 1 :
Déguiser en navigateur
conn.setRequestProperty("User-Agent", " Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
Ajouter un proxy au code
String host = "127.0.0.1"; String port = "8888"; setProxy(host, port); public static void setProxy(String host, String port) { System.setProperty("proxySet", "true"); System.setProperty("proxyHost", host); System.setProperty("proxyPort", port); }
Option 2 :
Ajoutez les attributs suivants pour empêcher le serveur de compresser gzip :
Java Doc en a une description :
Par défaut, cette implémentation de HttpURLConnection
demande aux serveurs d'utiliser la compression gzip. Puisque getContentLength()
renvoie le nombre d'octets transmis, vous ne pouvez pas utiliser cette méthode pour prédire combien d'octets peuvent être lus à partir de getInputStream()
. stream jusqu'à épuisement : quandread()
renvoie -1
conn.setRequestProperty("Accept-Encoding", "identity");
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!