Ricerca…


Osservazioni

  • L'utilizzo di HttpUrlConnection su Android richiede l'aggiunta dell'autorizzazione Internet alla tua app (in AndroidManifest.xml ).

  • Esistono anche altri client e librerie Java HTTP, come OkHttp di Square, che sono più facili da usare e possono offrire prestazioni migliori o più funzionalità.

Ottieni il corpo della risposta da un URL come stringa

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

Ciò scaricherà i dati di testo dall'URL specificato e li restituirà come una stringa.

Come funziona:

  • Per prima cosa, creiamo HttpUrlConnection dal nostro URL, con il new URL(url).openConnection() . Trasmettiamo UrlConnection per tornare a HttpUrlConnection , così abbiamo accesso a cose come aggiungere intestazioni (come User Agent) o controllare il codice di risposta. (Questo esempio non lo fa, ma è facile da aggiungere.)

  • Quindi, creare InputStream base al codice di risposta (per la gestione degli errori)

  • Quindi, crea un BufferedReader che ci permette di leggere il testo da InputStream che otteniamo dalla connessione.

  • Ora, aggiungiamo il testo a StringBuilder , riga per riga.

  • Chiudi l' InputStream e restituisci la stringa che ora abbiamo.

Gli appunti:

  • Questo metodo genererà una IoException di IoException in caso di errore (ad esempio un errore di rete o nessuna connessione Internet) e genererà anche un'eccezione MalformedUrlException non selezionata se l'URL specificato non è valido.

  • Può essere utilizzato per la lettura da qualsiasi URL che restituisce testo, come pagine Web (HTML), API REST che restituiscono JSON o XML, ecc.

  • Vedi anche: Leggi l'URL su String in poche righe di codice Java .

Uso:

È molto semplice:

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

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

Questo invierà i dati all'URL specificato, quindi leggerà la risposta riga per riga.

Come funziona

  • Come al solito otteniamo HttpURLConnection da un URL .
  • Imposta il tipo di contenuto utilizzando setRequestProperty , per impostazione predefinita è application/x-www-form-urlencoded
  • setDoOutput(true) indica la connessione che invieremo i dati.
  • Quindi otteniamo OutputStream chiamando getOutputStream() e scrivendo i dati su di esso. Non dimenticare di chiuderlo dopo aver finito.
  • Finalmente leggiamo la risposta del server.

Elimina risorsa

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

Questo ELIMINA la risorsa nell'URL specificato, quindi stampa l'intestazione della risposta.

Come funziona

  • otteniamo HttpURLConnection da un URL .
  • Imposta il tipo di contenuto utilizzando setRequestProperty , per impostazione predefinita è application/x-www-form-urlencoded
  • setDoInput(true) indica alla connessione che intendiamo utilizzare la connessione URL per l'input.
  • setRequestMethod("DELETE") per eseguire il DELETE HTTP

Finalmente stampiamo l'intestazione della risposta del server.

Controlla se esiste una risorsa

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

Spiegazione:

Se stai solo controllando se esiste una risorsa, è meglio usare una richiesta HEAD piuttosto che una GET. Ciò evita il sovraccarico del trasferimento della risorsa.

Si noti che il metodo restituisce true solo se il codice di risposta è 200 . Se si anticipano le risposte di reindirizzamento (ovvero 3XX), potrebbe essere necessario migliorare il metodo per onorarle.

Esempio:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow