Question HttpURLConnection lisant le contenu de la réponse sur 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 jette une exception 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 ResponseCode est toujours au 403, mais je peux obtenir le contenu HTML


33
2018-01-08 08:07


origine


Réponses:


le HttpURLConnection.getErrorStream méthode 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.


57
2018-01-08 08:14



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

17
2017-11-30 16:47



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

11
2018-01-08 10:19



essaye ça:

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

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


2
2017-11-30 06:27



J'ai eu la même erreur même après avoir ajouté la chaîne d'agent. Finalement, après une enquête de plusieurs jours, le problème a été résolu. Il est vraiment souhaitable que le schéma d'URL commence par "HTTPS", il en résulte une erreur 403. Il devrait être en minuscule ("https"). Donc, assurez-vous d'appeler "url.toLowercase ()" avant d'ouvrir la connexion


0
2018-04-29 21:18