Quand je récupère les données d'une URL avec une réponse 403
is = conn.getInputStream();
Il lève une exception IOException et je ne peux pas obtenir les données de réponse.
Mais lorsque j'utilise Firefox et que j'accède directement à cette URL, le code de réponse est toujours 403, mais le contenu HTML est disponible
La méthode HttpURLConnection.getErrorStream
renverra une InputStream
qui peut être utilisée pour extraire des données de conditions d'erreur (telles que 404), conformément aux javadocs.
Exemple d'utilisation de HttpURLConnection
:
String response = null;
try {
URL url = new URL("http://google.com/pagedoesnotexist");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// Hack to force HttpURLConnection to run the request
// Otherwise getErrorStream always returns null
connection.getResponseCode();
InputStream stream = connection.getErrorStream();
if (stream == null) {
stream = connection.getInputStream();
}
// This is a try with resources, Java 7+ only
// If you use Java 6 or less, use a finally block instead
try (Scanner scanner = new Scanner(stream)) {
scanner.useDelimiter("\\Z");
response = scanner.next();
}
} catch (MalformedURLException e) {
// Replace this with your exception handling
e.printStackTrace();
} catch (IOException e) {
// Replace this with your exception handling
e.printStackTrace();
}
essayez quelque chose comme ça:
try {
String text = "url";
URL url = new URL(text);
URLConnection conn = url.openConnection();
// fake request coming from browser
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String f = in.readLine();
in.close();
System.out.println(f);
} catch (Exception e) {
e.printStackTrace();
}
essaye ça:
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getResponseCode() / 100 == 2 ? con.getInputStream() : con.getErrorStream()));
J'ai eu la même erreur même après avoir ajouté la chaîne de l'agent. Finalement, après quelques jours, une enquête a permis de cerner le problème. Il faut vraiment que si le schéma d'URL commence par "HTTPS", il génère l'erreur 403. Il doit être en minuscule ("https"). Assurez-vous donc d'appeler "url.toLowercase ()" avant d'ouvrir la connexion