web-dev-qa-db-fra.com

HttpURLConnection lecture du contenu de la réponse sur l'erreur 403

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

34
yava

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.

63
coobird

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();
}
18
qwertzguy

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();
}
12
Infinity

essaye ça:

BufferedReader reader = new BufferedReader(new InputStreamReader(con.getResponseCode() / 100 == 2 ? con.getInputStream() : con.getErrorStream()));

source https://stackoverflow.com/a/30712213/505623

2
Fathurrahman Abahh

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

0
Sojan P R