Comment spécifier User Agent et Referer dans la méthode FileUtils.copyURLToFile (URL, File)?

J’utilise FileUtils.copyURLToFile(URL, File) , une pièce Apache Commons IO 2.4 , pour télécharger et enregistrer le fichier sur mon ordinateur. Le problème est que certains sites refusent la connexion sans les données de référent et d’agent utilisateur.

Mes questions:

  1. Existe-t-il un moyen de spécifier l’agent utilisateur et le référent vers la méthode copyURLToFile ?
  2. Ou dois-je utiliser une autre approche pour télécharger un fichier, puis enregistrer un fichier InputStream donné dans un fichier?

Je ré-implémente la fonctionnalité avec HttpComponents au lieu de Commons-IO . Ce code vous permet de télécharger un fichier en Java en fonction de son URL et de l’enregistrer à la destination spécifique.

Le code final:

 public static boolean saveFile(URL imgURL, Ssortingng imgSavePath) { boolean isSucceed = true; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(imgURL.toSsortingng()); httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.11 Safari/537.36"); httpGet.addHeader("Referer", "https://www.google.com"); try { CloseableHttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity imageEntity = httpResponse.getEntity(); if (imageEntity != null) { FileUtils.copyInputStreamToFile(imageEntity.getContent(), new File(imgSavePath)); } } catch (IOException e) { isSucceed = false; } httpGet.releaseConnection(); return isSucceed; } 

Bien entendu, le code ci-dessus prend plus d’espace que juste une seule ligne de code:

 FileUtils.copyURLToFile(imgURL, new File(imgSavePath), URLS_FETCH_TIMEOUT, URLS_FETCH_TIMEOUT); 

mais cela vous donnera plus de contrôle sur un processus et vous permettra de spécifier non seulement les délais, mais aussi User-Agent valeurs User-Agent et Referer , qui sont essentielles pour de nombreux sites Web.

Probablement pas, sauf si vous pouvez obtenir le mécanisme sous-jacent qui ouvre l’URL.

Je recommande d’utiliser la bibliothèque https://hc.apache.org/ . Cela a beaucoup de fonctionnalités concernant les en-têtes, etc.