Buscar..


Observaciones

  • El uso de HttpUrlConnection en Android requiere que agregue el permiso de Internet a su aplicación (en AndroidManifest.xml ).

  • También hay otros clientes y bibliotecas HTTP de Java, como OkHttp de Square, que son más fáciles de usar y pueden ofrecer un mejor rendimiento o más funciones.

Obtener el cuerpo de respuesta de una URL como una cadena

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

Esto descargará los datos de texto de la URL especificada y los devolverá como una cadena.

Cómo funciona esto:

  • Primero, creamos una HttpUrlConnection desde nuestra URL, con la new URL(url).openConnection() . Lanzamos la UrlConnection esto vuelve a una HttpUrlConnection , por lo que tenemos acceso a cosas como agregar encabezados (como User Agent) o verificar el código de respuesta. (Este ejemplo no lo hace, pero es fácil de agregar).

  • Luego, cree InputStream basándose en el código de respuesta (para el manejo de errores)

  • Luego, cree un BufferedReader que nos permita leer el texto de InputStream que obtenemos de la conexión.

  • Ahora, agregamos el texto a un StringBuilder , línea por línea.

  • Cierre el InputStream y devuelva la cadena que ahora tenemos.

Notas:

  • Este método arrojará una IoException en caso de error (como un error de red o sin conexión a Internet), y también lanzará una excepción MalformedUrlException no verificada si la URL dada no es válida.

  • Puede utilizarse para leer desde cualquier URL que devuelva texto, como páginas web (HTML), API REST que devuelvan JSON o XML, etc.

  • Vea también: Lea la URL a Cadena en algunas líneas de código Java .

Uso:

Es muy simple:

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

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

Esto enviará los datos a la URL especificada y luego leerá la respuesta línea por línea.

Cómo funciona

  • Como de costumbre obtenemos el HttpURLConnection desde una URL .
  • Establezca el tipo de contenido usando setRequestProperty , por defecto es application/x-www-form-urlencoded
  • setDoOutput(true) le dice a la conexión que enviaremos datos.
  • Luego obtenemos el OutputStream llamando a getOutputStream() y escribimos datos en él. No olvides cerrarla una vez que hayas terminado.
  • Por fin leemos la respuesta del servidor.

Eliminar recurso

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

Esto BORRARÁ el recurso en la URL especificada, luego imprimirá el encabezado de la respuesta.

Cómo funciona

  • obtenemos la HttpURLConnection desde una URL .
  • Establezca el tipo de contenido usando setRequestProperty , por defecto es application/x-www-form-urlencoded
  • setDoInput(true) le dice a la conexión que tenemos la intención de usar la conexión URL para la entrada.
  • setRequestMethod("DELETE") para realizar HTTP DELETE

Por fin imprimimos el encabezado de respuesta del servidor.

Compruebe si el recurso existe

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

Explicación:

Si solo está comprobando si existe un recurso, es mejor usar una solicitud HEAD que un GET. Esto evita la sobrecarga de transferir el recurso.

Tenga en cuenta que el método solo devuelve true si el código de respuesta es 200 . Si anticipa respuestas de redireccionamiento (es decir, 3XX), entonces es posible que el método deba mejorarse para cumplirlas.

Ejemplo:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow