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:
copyURLToFile
? 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.