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 der new URL(url).openConnection() . Wir UrlConnection die UrlConnection um, UrlConnection diese in eine HttpUrlConnection , 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 aus InputStream 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 eine IoException aus, falls ein Fehler IoException (z. B. ein Netzwerkfehler oder keine Internetverbindung), und es wird auch eine ungeprüfte MalformedUrlException 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 einer URL .
  • setRequestProperty Sie den Inhaltstyp mit setRequestProperty . Standardmäßig ist es application/x-www-form-urlencoded
  • setDoOutput(true) teilt der Verbindung mit, dass wir Daten senden werden.
  • Dann erhalten wir den OutputStream indem wir getOutputStream() 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 einer URL .
  • setRequestProperty Sie den Inhaltstyp mit setRequestProperty . Standardmäßig ist es application/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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow