Zoeken…


Opmerkingen

  • Als u HttpUrlConnection op Android gebruikt, moet u de internetmachtiging aan uw app toevoegen (in AndroidManifest.xml ).

  • Er zijn ook andere Java HTTP-clients en -bibliotheken, zoals Square's OkHttp , die gemakkelijker te gebruiken zijn en mogelijk betere prestaties of meer functies bieden.

Haal respons body uit een URL als een String

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();
}

Hiermee worden tekstgegevens van de opgegeven URL gedownload en als een tekenreeks geretourneerd.

Hoe dit werkt:

  • Eerst maken we een HttpUrlConnection van onze URL, met new URL(url).openConnection() . We casten de UrlConnection dit keert terug naar een HttpUrlConnection , dus we hebben toegang tot dingen zoals het toevoegen van headers (zoals User Agent) of het controleren van de reactiecode. (Dit voorbeeld doet dat niet, maar het is eenvoudig toe te voegen.)

  • Maak vervolgens InputStream basis van de reactiecode (voor foutafhandeling)

  • Maak vervolgens een BufferedReader waarmee we tekst kunnen lezen van InputStream we van de verbinding krijgen.

  • Nu voegen we de tekst regel voor regel toe aan een StringBuilder .

  • Sluit de InputStream en retourneer de String die we nu hebben.

Opmerkingen:

  • Deze methode IoException een IoException in geval van mislukking (zoals een netwerkfout of geen internetverbinding) en geeft ook een ongecontroleerde MalformedUrlException als de opgegeven URL niet geldig is.

  • Het kan worden gebruikt voor het lezen van elke URL die tekst retourneert, zoals webpagina's (HTML), REST API's die JSON of XML retourneren, enz.

  • Zie ook: URL in string lezen in enkele regels Java-code .

Gebruik:

Is heel simpel:

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

POST-gegevens

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();
    }
}

Hiermee worden gegevens naar de opgegeven URL POST en vervolgens de reactie regel voor regel gelezen.

Hoe het werkt

  • Zoals gewoonlijk verkrijgen we de HttpURLConnection via een URL .
  • Stel het inhoudstype in met setRequestProperty , standaard is dit application/x-www-form-urlencoded
  • setDoOutput(true) vertelt de verbinding dat we gegevens zullen verzenden.
  • Vervolgens verkrijgen we de OutputStream door getOutputStream() aan te roepen en er gegevens getOutputStream() schrijven. Vergeet niet om het te sluiten nadat u klaar bent.
  • Eindelijk lezen we de serverreactie.

Bron verwijderen

   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();
        }
    }

Hiermee wordt de bron in de opgegeven URL VERWIJDERD en wordt vervolgens de antwoordkop afgedrukt.

Hoe het werkt

  • we verkrijgen de HttpURLConnection via een URL .
  • Stel het inhoudstype in met setRequestProperty , standaard is dit application/x-www-form-urlencoded
  • setDoInput(true) vertelt de verbinding die we van plan zijn om de URL-verbinding te gebruiken voor invoer.
  • setRequestMethod("DELETE") om HTTP DELETE uit te voeren

Eindelijk drukken we de server response header af.

Controleer of de bron bestaat

/**
 * 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;
}

Uitleg:

Als u alleen controleert of een bron bestaat, is het beter om een HEAD-verzoek te gebruiken dan een GET. Dit vermijdt de overhead van het overbrengen van de bron.

Merk op dat de methode alleen true retourneert als de responscode 200 . Als u omleidingsreacties verwacht (bijv. 3XX), moet de methode mogelijk worden verbeterd om ze te respecteren.

Voorbeeld:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow