web-dev-qa-db-fra.com

Définition d'un en-tête personnalisé à l'aide de HttpURLConnection

Je fais simplement une demande GET à une API Rest en utilisant HttpURLConnection.

J'ai besoin d'ajouter des en-têtes personnalisés mais j'obtiens null en essayant de récupérer leurs valeurs.

Code:

URL url;
try {
    url = new URL("http://www.example.com/rest/");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    // Set Headers
    conn.setRequestProperty("CustomHeader", "someValue");
    conn.setRequestProperty("accept", "application/json");

    // Output is null here <--------
    System.out.println(conn.getHeaderField("CustomHeader"));

    // Request not successful
    if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
        throw new RuntimeException("Request Failed. HTTP Error Code: " + conn.getResponseCode());
    }

    // Read response
    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    StringBuffer jsonString = new StringBuffer();
    String line;
    while ((line = br.readLine()) != null) {
        jsonString.append(line);
    }
    br.close();
    conn.disconnect();
} catch (IOException e) {
    e.printStackTrace();
}

Qu'est-ce que je rate?

8
Beginner

La conn.getHeaderField("CustomHeader") renvoie l'en-tête réponse et non celui de la requête.

Pour retourner l'en-tête de la demande, utilisez: conn.getRequestProperty("CustomHeader")

6
Krzysztof Krasoń

C'est une bonne idée d'envoyer

conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);

au lieu de

// Set Headers
conn.setRequestProperty("CustomHeader", "someValue");
conn.setRequestProperty("accept", "application/json");

La valeur de type et l'en-tête doivent être modifiés. cela fonctionne dans mon cas.

6
Alp Altunel