Java Language
HTTP-Verbindung
Suche…
Bemerkungen
Wenn Sie HttpUrlConnection unter Android verwenden, müssen Sie Ihrer App die Internet-Berechtigung hinzufügen (in
AndroidManifest.xml
).Es gibt auch andere Java-HTTP-Clients und -Bibliotheken, z. B. OkHttp von Square, die einfacher zu verwenden sind und möglicherweise eine bessere Leistung oder mehr Funktionen bieten.
Rufen Sie den Antworttext aus einer URL als String ab
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();
}
Dadurch werden Textdaten von der angegebenen URL heruntergeladen und als String zurückgegeben.
Wie das funktioniert:
Zuerst erstellen wir eine
HttpUrlConnection
aus unserer URL mit dernew URL(url).openConnection()
. WirUrlConnection
dieUrlConnection
um,UrlConnection
diese in eineHttpUrlConnection
, sodass wir auf Dinge wie das Hinzufügen von Headern (z. B. User Agent) oder das Überprüfen des Antwortcodes zugreifen können. (Dieses Beispiel macht das nicht, aber es ist leicht hinzuzufügen.)Erstellen Sie dann
InputStream
basierend auf dem Antwortcode (zur Fehlerbehandlung).Erstellen Sie dann einen
BufferedReader
, mit dem wir Text ausInputStream
lesen können, den wir aus der Verbindung erhalten.Jetzt hängen wir den Text Zeile für Zeile an einen
StringBuilder
an.Schließen Sie den
InputStream
und geben Sie den jetzt vorhandenen String zurück.
Anmerkungen:
Diese Methode
IoException
eineIoException
aus, falls ein FehlerIoException
(z. B. ein Netzwerkfehler oder keine Internetverbindung), und es wird auch eine ungeprüfteMalformedUrlException
wenn die angegebene URL nicht gültig ist.Es kann zum Lesen von URLs verwendet werden, die Text zurückgeben, z. B. Webseiten (HTML), REST-APIs, die JSON oder XML zurückgeben, usw.
Siehe auch: Lese URL to String in wenigen Zeilen Java-Code .
Verwendungszweck:
Ist sehr einfach:
String text = getText(”http://example.com");
//Do something with the text from example.com, in this case the HTML.
Post-Daten
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();
}
}
Dadurch werden POST-Daten an die angegebene URL gesendet, und die Antwort wird Zeile für Zeile gelesen.
Wie es funktioniert
- Wie üblich erhalten wir die
HttpURLConnection
von einerURL
. -
setRequestProperty
Sie den Inhaltstyp mitsetRequestProperty
. Standardmäßig ist esapplication/x-www-form-urlencoded
-
setDoOutput(true)
teilt der Verbindung mit, dass wir Daten senden werden. - Dann erhalten wir den
OutputStream
indem wirgetOutputStream()
aufrufen und Daten in ihn schreiben. Vergiss nicht, es zu schließen, wenn du fertig bist. - Zum Schluss lesen wir die Serverantwort.
Ressource löschen
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();
}
}
Dies löscht die Ressource in der angegebenen URL und druckt dann den Antwortheader.
Wie es funktioniert
- Wir erhalten die
HttpURLConnection
von einerURL
. -
setRequestProperty
Sie den Inhaltstyp mitsetRequestProperty
. Standardmäßig ist esapplication/x-www-form-urlencoded
-
setDoInput(true)
teilt der Verbindung mit, dass die URL-Verbindung für die Eingabe verwendet werden soll. -
setRequestMethod("DELETE")
zum Ausführen von HTTP DELETE
Zum Schluss drucken wir den Server-Antwortheader.
Überprüfen Sie, ob eine Ressource vorhanden ist
/**
* 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;
}
Erläuterung:
Wenn Sie nur prüfen, ob eine Ressource vorhanden ist, ist es besser, eine HEAD-Anforderung als eine GET zu verwenden. Dadurch wird der Aufwand für die Übertragung der Ressource vermieden.
Beachten Sie, dass die Methode nur dann true
zurückgibt true
wenn der Antwortcode 200
lautet. Wenn Sie Umleitungsantworten (z. B. 3XX) erwarten, muss die Methode möglicherweise verbessert werden, um sie zu berücksichtigen.
Beispiel:
checkIfResourceExists(new URL("http://images.google.com/")); // true
checkIfResourceExists(new URL("http://pictures.google.com/")); // false