3 votes

Java Http POST avec autorisation de base et redirection

Le programme effectue un post http avec une autorisation de base, mais lorsque le post est terminé, la page est redirigée vers une page de succès. La redirection échoue en raison de l'échec de l'autorisation 401.

        final URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestProperty("Authorization", "basic " +base64);
        wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
        rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

La ligne

rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

échoue en raison de l'échec de l'autorisation 401...

J'ai également essayé d'ajouter

conn.setRequestProperty("Authorization", "basic " +base64);

après

wr.flush();

Je reçois l'erreur "Déjà connecté". De toute évidence, l'autorisation que j'ai définie n'est pas appliquée à la redirection. Toute solution à ce problème sera grandement appréciée.

2voto

Femi Points 42054

Vous avez 2 options que vous pouvez essayer :

  1. Utilisez le setDefaultRequestProperty (voir http://download.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html#setDefaultRequestProperty%28java.lang.String,%20java.lang.String%29 ) pour définir l'en-tête d'autorisation.
  2. Désactiver le suivi automatique des redirections : http://download.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#setInstanceFollowRedirects%28boolean%29 et le faire manuellement.

1voto

Subasteve Points 33

Voici la solution qui fonctionne pour tous ceux qui ont ce problème. Merci encore à Femi pour avoir fourni une idée de solution de contournement.

URL url = new URL(page);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setInstanceFollowRedirects(false);
conn.setDoOutput(true);
conn.setRequestProperty("Authorization", "basic " +base64);
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
if(conn.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP){
    url = new URL(conn.getHeaderField("Location"));
    conn = (HttpURLConnection)url.openConnection();
    conn.setRequestProperty("Authorization", "basic " +base64);
}
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X