HttpURLConnection lecture du contenu de la réponse à l'erreur 403 [dupliquer]

cette question a déjà une réponse ici:

quand je récupère des données d'une URL avec une réponse 403

is = conn.getInputStream();

il lance une IOException et je ne peux pas obtenir les données de réponse.

mais quand j'utilise firefox et que j'accède directement à cette url, le code responsable est toujours 403, mais je peux obtenir le contenu html

33
demandé sur falsarella 2011-01-08 11:07:55

5 réponses

la méthode HttpURLConnection.getErrorStream retournera un InputStream qui peut être utilisé pour récupérer des données à partir de conditions d'erreur (comme un 404), selon les javadocs.

59
répondu coobird 2011-01-08 08:14:38

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
répondu qwertzguy 2014-11-11 23:07:32

essayez quelque chose comme ceci:

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
répondu Infinity 2011-01-08 10:19:40

essayez ceci:

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

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

2
répondu Fathurrahman Abahh 2017-05-23 11:46:18

j'ai eu la même erreur même après avoir ajouté agent string. Enfin, après quelques jours d'enquête compris la question. Il est vraiment nécessaire si le schéma d'url commence par "HTTPS", il produit l'erreur 403. Il doit être en minuscules ("https"). Donc, assurez-vous que vous appelez "l'url.toLowercase () "avant d'ouvrir la connexion

0
répondu Sojan P R 2016-04-29 21:18:04