Sök…


Anmärkningar

  • Att använda HttpUrlConnection på Android kräver att du lägger till Internet-behörighet till din app (i AndroidManifest.xml ).

  • Det finns också andra Java HTTP-klienter och bibliotek, till exempel Square's OkHttp , som är lättare att använda och kan erbjuda bättre prestanda eller fler funktioner.

Få svarskroppen från en URL som en sträng

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

Detta hämtar textdata från den angivna URL: en och returnerar den som en sträng.

Så här fungerar:

  • Först skapar vi en HttpUrlConnection från vår URL, med en new URL(url).openConnection() . Vi kastar UrlConnection detta återgår till en HttpUrlConnection , så vi har tillgång till saker som att lägga till rubriker (t.ex. User Agent) eller kontrollera svarkoden. (Det här exemplet gör inte det, men det är lätt att lägga till.)

  • InputStream baserat på InputStream (för felhantering)

  • BufferedReader en BufferedReader som låter oss läsa text från InputStream vi får från anslutningen.

  • Nu lägger vi till en StringBuilder , rad för rad.

  • Stäng InputStream och returnera den sträng vi nu har.

Anmärkningar:

  • Den här metoden kommer att kasta en IoException i händelse av fel (t.ex. ett nätverksfel eller ingen internetanslutning), och den kommer också att kasta en okontrollerad MalformedUrlException om den angivna URL-adressen inte är giltig.

  • Det kan användas för att läsa från valfri URL som returnerar text, till exempel webbsidor (HTML), REST-API: er som returnerar JSON eller XML, etc.

  • Se även: Läs URL till String i några rader med Java-kod .

Användande:

Är mycket enkelt:

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

POST-data

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

Det här publicerar data till den angivna URL: en och läser sedan svaret rad för rad.

Hur det fungerar

  • Som vanligt får vi HttpURLConnection från en URL .
  • Ställ in innehållstyp med setRequestProperty , som standard är det application/x-www-form-urlencoded
  • setDoOutput(true) berättar för anslutningen att vi kommer att skicka data.
  • Sedan får vi OutputStream genom att ringa getOutputStream() och skriva data till det. Glöm inte att stänga det när du är klar.
  • Till sist läste vi serverns svar.

Radera resurs

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

Detta raderar resursen i den angivna URL: en och skriver sedan ut svarhuvudet.

Hur det fungerar

  • vi får HttpURLConnection från en URL .
  • Ställ in innehållstyp med setRequestProperty , som standard är det application/x-www-form-urlencoded
  • setDoInput(true) berättar för anslutningen att vi tänker använda URL-anslutningen för inmatning.
  • setRequestMethod("DELETE") att utföra HTTP DELETE

Till sist skriver vi ut serverns svarstitel.

Kontrollera om resursen finns

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

Förklaring:

Om du bara kontrollerar om det finns en resurs, är det bättre att använda en HEAD-begäran än en GET. Detta undviker överhead för överföring av resursen.

Observera att metoden bara returnerar true om svarskoden är 200 . Om du förutser omdirigeringssvar (dvs. 3XX) svar, kan metoden behöva förbättras för att hedra dem.

Exempel:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow