Java Language
HttpURLConnection
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 unenew URL(url).openConnection()
. NousUrlConnection
leUrlConnection
retourne enHttpUrlConnection
, 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
enInputStream
basant sur le code de réponse (pour la gestion des erreurs)Ensuite, créez un
BufferedReader
qui nous permet de lire le texte deInputStream
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) etIoException
uneIoException
MalformedUrlException
nonMalformedUrlException
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'uneURL
. - Définissez le type de contenu à l'aide de
setRequestProperty
, par défautapplication/x-www-form-urlencoded
-
setDoOutput(true)
indique à la connexion que nous allons envoyer des données. - Ensuite, nous obtenons le
OutputStream
en appelantgetOutputStream()
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'uneURL
. - Définissez le type de contenu à l'aide de
setRequestProperty
, par défautapplication/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