Java Language
HttpURLConnection
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 lanew URL(url).openConnection()
. Lanzamos laUrlConnection
esto vuelve a unaHttpUrlConnection
, 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 deInputStream
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ónMalformedUrlException
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 unaURL
. - Establezca el tipo de contenido usando
setRequestProperty
, por defecto esapplication/x-www-form-urlencoded
-
setDoOutput(true)
le dice a la conexión que enviaremos datos. - Luego obtenemos el
OutputStream
llamando agetOutputStream()
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 unaURL
. - Establezca el tipo de contenido usando
setRequestProperty
, por defecto esapplication/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