Recherche…


Remarques

  • L'utilisation de HttpUrlConnection sur Android nécessite que vous ajoutiez l'autorisation Internet à votre application (dans le AndroidManifest.xml ).

  • Il existe également d'autres bibliothèques et clients Java HTTP, tels que OkHttp de Square, qui sont plus faciles à utiliser et peuvent offrir de meilleures performances ou davantage de fonctionnalités.

Obtenir le corps de la réponse à partir d'une URL en tant que chaîne

String getText(String url) throws IOException {
    HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
    //add headers to the connection, or check the status if desired..
    
    // handle error response code it occurs
    int responseCode = conn.getResponseCode();
    InputStream inputStream;
    if (200 <= responseCode && responseCode <= 299) {
        inputStream = connection.getInputStream();
    } else {
        inputStream = connection.getErrorStream();
    }

    BufferedReader in = new BufferedReader(
        new InputStreamReader(
            inputStream));

    StringBuilder response = new StringBuilder();
    String currentLine;

    while ((currentLine = in.readLine()) != null) 
        response.append(currentLine);

    in.close();

    return response.toString();
}

Cela téléchargera les données textuelles de l'URL spécifiée et les renverra sous forme de chaîne.

Comment ça marche:

  • Tout d'abord, nous créons un HttpUrlConnection partir de notre URL, avec une new URL(url).openConnection() . Nous UrlConnection le UrlConnection retourne en HttpUrlConnection , nous avons donc accès à des choses comme l'ajout d'en-têtes (tels que User Agent) ou la vérification du code de réponse. (Cet exemple ne le fait pas, mais c'est facile à ajouter.)

  • Ensuite, créez InputStream en InputStream basant sur le code de réponse (pour la gestion des erreurs)

  • Ensuite, créez un BufferedReader qui nous permet de lire le texte de InputStream nous recevons de la connexion.

  • Maintenant, nous ajoutons le texte à StringBuilder , ligne par ligne.

  • Fermez le InputStream et retournez la chaîne que nous avons maintenant.

Remarques:

  • Cette méthode lancera une IoException en cas d’échec (telle qu’une erreur réseau ou aucune connexion Internet) et IoException une IoException MalformedUrlException non MalformedUrlException si l’URL indiquée n’est pas valide.

  • Il peut être utilisé pour lire n'importe quelle URL qui renvoie du texte, comme les pages Web (HTML), les API REST qui renvoient JSON ou XML, etc.

  • Voir aussi: Lire l'URL de la chaîne dans quelques lignes de code Java .

Usage:

Est très simple:

String text = getText(”http://example.com");
//Do something with the text from example.com, in this case the HTML.

Données POST

public static void post(String url, byte [] data, String contentType) throws IOException {
    HttpURLConnection connection = null;
    OutputStream out = null;
    InputStream in = null;

    try {
        connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestProperty("Content-Type", contentType);
        connection.setDoOutput(true);

        out = connection.getOutputStream();
        out.write(data);
        out.close();

        in = connection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        in.close();

    } finally {
        if (connection != null) connection.disconnect();
        if (out != null) out.close();
        if (in != null) in.close();
    }
}

Cela affichera les données dans l'URL spécifiée, puis lira la réponse ligne par ligne.

Comment ça marche

  • Comme d'habitude, nous obtenons la HttpURLConnection partir d'une URL .
  • Définissez le type de contenu à l'aide de setRequestProperty , par défaut application/x-www-form-urlencoded
  • setDoOutput(true) indique à la connexion que nous allons envoyer des données.
  • Ensuite, nous obtenons le OutputStream en appelant getOutputStream() et en y écrivant des données. N'oubliez pas de le fermer après avoir terminé.
  • Nous lisons enfin la réponse du serveur.

Supprimer une ressource

   public static void delete (String urlString, String contentType) throws IOException {
        HttpURLConnection connection = null;
    
        try {
            URL url = new URL(urlString);
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.setRequestMethod("DELETE");
            connection.setRequestProperty("Content-Type", contentType);
    
            Map<String, List<String>> map = connection.getHeaderFields();
            StringBuilder sb = new StringBuilder();
            Iterator<Map.Entry<String, String>> iterator = responseHeader.entrySet().iterator();
            while(iterator.hasNext())
            {
                Map.Entry<String, String> entry = iterator.next();
                sb.append(entry.getKey());
                sb.append('=').append('"');
                sb.append(entry.getValue());
                sb.append('"');
                if(iterator.hasNext())
                {
                    sb.append(',').append(' ');
                }
            }
            System.out.println(sb.toString());
    
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) connection.disconnect();
        }
    }

Cela supprimera la ressource dans l'URL spécifiée, puis imprimera l'en-tête de réponse.

Comment ça marche

  • nous obtenons le HttpURLConnection partir d'une URL .
  • Définissez le type de contenu à l'aide de setRequestProperty , par défaut application/x-www-form-urlencoded
  • setDoInput(true) indique à la connexion que nous avons l'intention d'utiliser la connexion URL pour la saisie.
  • setRequestMethod("DELETE") pour exécuter HTTP DELETE

Enfin, nous imprimons l'en-tête de réponse du serveur.

Vérifier si la ressource existe

/**
 * Checks if a resource exists by sending a HEAD-Request.
 * @param url The url of a resource which has to be checked.
 * @return true if the response code is 200 OK.
 */
public static final boolean checkIfResourceExists(URL url) throws IOException {
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("HEAD");
    int code = conn.getResponseCode();
    conn.disconnect();
    return code == 200;
}

Explication:

Si vous vérifiez simplement si une ressource existe, il vaut mieux utiliser une requête HEAD qu’une requête GET. Cela évite le transfert de la ressource.

Notez que la méthode ne renvoie que true si le code de réponse est 200 . Si vous prévoyez des réponses de redirection (c.-à-d. 3XX), vous devrez peut-être améliorer la méthode pour les respecter.

Exemple:

checkIfResourceExists(new URL("http://images.google.com/")); // true
checkIfResourceExists(new URL("http://pictures.google.com/")); // false


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow