Google Code disponible en: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
Puedes utilizar java.net.URLConnection de la biblioteca estándar de Java para realizar conexiones HTTP y HTTPS desde tu aplicación Java. App Engine implementa esta interfaz a través del servicio de extracción de URL.
Para obtener más información sobre java.net, consulta la documentación java.net.URLConnection de Sun.
Una forma sencilla de obtener el contenido de una página en una URL es crear un objeto java.net.URL y, a continuación, ejecutar el método openStream(). El método gestiona los detalles de crear la conexión, emite una solicitud HTTP GET y recupera los datos de respuesta.
import java.net.MalformedURLException;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
// ...
try {
URL url = new URL("http://www.example.com/atom.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
// ...
}
reader.close();
} catch (MalformedURLException e) {
// ...
} catch (IOException e) {
// ...
}
Para solicitudes más sofisticadas, puedes ejecutar el método openConnection() del objeto de la URL para obtener un objeto URLConnection (ya sea HttpURLConnection o HttpsURLConnection, según la URL). Puedes preparar este objeto con información adicional antes de emitir la solicitud. Para realizar la solicitud, puedes ejecutar un método del objeto URLConnection como, por ejemplo, getInputStream() o getOutputStream().
La implementación de URLConnection de App Engine no mantiene una conexión permanente con el host remoto. Cuando la aplicación establece datos de solicitud o escribe en el flujo de salida, los datos de solicitud se mantienen en la memoria. Cuando la aplicación accede a datos relacionados con la respuesta como, por ejemplo, obtener el flujo de entrada (o ejecutar el método connect()), App Engine ejecuta el servicio de extracción de URL con los datos de solicitud, obtiene la respuesta, cierra la conexión y devuelve los datos de respuesta.
El siguiente ejemplo realiza una solicitud HTTP POST a una URL con algunos datos de formulario:
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
// ...
String message = URLEncoder.encode("my message", "UTF-8");
try {
URL url = new URL("http://www.example.com/comment");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write("message=" + message);
writer.close();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// OK
} else {
// Server returned HTTP error code.
}
} catch (MalformedURLException e) {
// ...
} catch (IOException e) {
// ...
}
Para establecer un encabezado HTTP en la solicitud saliente, ejecuta el método setRequestProperty() de HttpURLConnection.
connection.setRequestProperty("X-MyApp-Version", "2.7.3");
De forma predeterminada, HttpURLConnection sigue redireccionamientos HTTP. El servicio de extracción de URL sigue hasta 5 redireccionamientos.
Para inhabilitar el seguimiento de los redireccionamientos, ejecuta el método setFollowRedirects() de HttpURLConnection:
connection.setFollowRedirects(false);
El servicio de extracción de URL no admite conexiones HTTP permanentes. Cuando la aplicación accede a datos de respuesta a través del objeto URLConnection, App Engine ejecuta el servicio de extracción de URL para completar la solicitud. Después de acceder a los datos de respuesta, los datos de solicitud no se pueden solicitar.
La aplicación no puede establecer tiempos de espera de conexión explícitos para la solicitud.
El servicio de extracción de URL limita el tamaño de los datos para una solicitud saliente y para una respuesta entrante. Cuando se utiliza el API de java.net API, los datos superiores al límite se truncan de forma silenciosa. El API de extracción de URL de nivel inferior te permite especificar si se trunca de forma silenciosa o si al superar el límite se genera una excepción.