311 votes

Ajout de l'en-tête pour HttpURLConnection

Je tente d'ajouter un en-tête pour ma requête en utilisant HttpUrlConnection mais la méthode setRequestProperty() ne semble pas fonctionner. Le serveur ne reçoit aucune requête avec mon en-tête.

HttpURLConnection hc;
    try {
        String authorization = "";
        URL address = new URL(url);
        hc = (HttpURLConnection) address.openConnection();

        hc.setDoOutput(true);
        hc.setDoInput(true);
        hc.setUseCaches(false);

        if (username != null && password != null) {
            authorization = username + ":" + password;
        }

        if (authorization != null) {
            byte[] encodedBytes;
            encodedBytes = Base64.encode(authorization.getBytes(), 0);
            authorization = "Basic " + encodedBytes;
            hc.setRequestProperty("Authorization", authorization);
        }

503voto

Cyril Beschi Points 161

J'ai utilisé le code suivant dans le passé et cela avait fonctionné avec l'authentification de base activée dans TomCat :

URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();

String userCredentials = "nom d'utilisateur:mot de passe";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));

myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setRequestProperty("Content-Length", "" + postData.getBytes().length);
myURLConnection.setRequestProperty("Content-Language", "en-US");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);

Vous pouvez essayer le code ci-dessus. Le code ci-dessus est pour POST, et vous pouvez le modifier pour GET

18voto

Joseph Cozad Points 190

Juste parce que je ne vois pas cette information dans les réponses ci-dessus, la raison pour laquelle le snippet de code initialement posté ne fonctionne pas correctement est parce que la variable encodedBytes est un byte[] et non une valeur String. Si vous passez le byte[] à un new String() comme ci-dessous, le snippet de code fonctionne parfaitement.

encodedBytes = Base64.encode(authorization.getBytes(), 0);
authorization = "Basic " + new String(encodedBytes);

14voto

Chandubabu Points 141

Si vous utilisez Java 8, utilisez le code ci-dessous.

URLConnection connection = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) connection;

String basicAuth = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8));
httpConn.setRequestProperty ("Authorization", "Basic "+basicAuth);

6voto

gori Points 317

Enfin cela a fonctionné pour moi

private String buildBasicAuthorizationString(String username, String password) {

    String credentials = username + ":" + password;
    return "Basic " + new String(Base64.encode(credentials.getBytes(), Base64.NO_WRAP));
}

5voto

pintu Points 121

Votre code est bon. Vous pouvez également l'utiliser de cette manière.

public static String getResponseFromJsonURL(String url) {
    String jsonResponse = null;
    if (CommonUtility.isNotEmpty(url)) {
        try {
            /************** Pour obtenir une réponse à partir de l'URL HTTP ***************/
            URL object = new URL(url);

            HttpURLConnection connection = (HttpURLConnection) object.openConnection();
            // int timeOut = connection.getReadTimeout();
            connection.setReadTimeout(60 * 1000);
            connection.setConnectTimeout(60 * 1000);
            String authorization="xyz:xyz$123";
            String encodedAuth="Basic "+Base64.encode(authorization.getBytes());
            connection.setRequestProperty("Authorization", encodedAuth);
            int responseCode = connection.getResponseCode();
            //String responseMsg = connection.getResponseMessage();

            if (responseCode == 200) {
                InputStream inputStr = connection.getInputStream();
                String encoding = connection.getContentEncoding() == null ? "UTF-8"
                        : connection.getContentEncoding();
                jsonResponse = IOUtils.toString(inputStr, encoding);
                /************** Pour obtenir une réponse à partir de l'URL HTTP ***************/

            }
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
    return jsonResponse;
}

Il retourne le code de réponse 200 si l'autorisation est réussie

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