No puedo entender por qué no se redirige a Java HttpURLConnection
. Yo uso el siguiente código para obtener this page:URLConnection no sigue redirigir
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStream;
public class Tester {
public static void main(String argv[]) throws Exception{
InputStream is = null;
try {
String bitlyUrl = "http://bit.ly/4hW294";
URL resourceUrl = new URL(bitlyUrl);
HttpURLConnection conn = (HttpURLConnection)resourceUrl.openConnection();
conn.setConnectTimeout(15000);
conn.setReadTimeout(15000);
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)");
conn.connect();
is = conn.getInputStream();
String res = conn.getURL().toString();
if (res.toLowerCase().contains("bit.ly"))
System.out.println("bit.ly is after resolving: "+res);
}
catch (Exception e) {
System.out.println("error happened: "+e.toString());
}
finally {
if (is != null) is.close();
}
}
}
Por otra parte, me da la siguiente respuesta (Parece que toda la razón!):
GET /4hW294 HTTP/1.1
Host: bit.ly
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru-RU; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
HTTP/1.1 301 Moved
Server: nginx/0.7.42
Date: Thu, 10 Dec 2009 20:28:44 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Location: https://www.myganocafe.com/CafeMacy
MIME-Version: 1.0
Content-Length: 297
Por desgracia, la variable res
contiene el mismo URL y corriente contiene lo siguiente (obviamente, de Java HttpURLConnection
no sigue redirigir!):
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<HEAD>
<TITLE>Moved</TITLE>
</HEAD>
<BODY>
<H2>Moved</H2>
<A HREF="https://www.myganocafe.com/CafeMacy">The requested URL has moved here.</A>
<P ALIGN=RIGHT><SMALL><I>AOLserver/4.5.1 on http://127.0.0.1:7400</I></SMALL></P>
</BODY>
</HTML>
Gracias. Acabo de encontrar confiramción: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4620571. A saber: "Después de la discusión entre los ingenieros de Java Networking, se considera que no deberíamos seguir automáticamente la redirección de un protocolo a otro, por ejemplo, de http a https y viceversa, al hacerlo puede tener serias consecuencias de seguridad. para devolver las respuestas del servidor para la redirección. Compruebe el código de respuesta y el valor del campo del encabezado de ubicación para la información de redirección. Es responsabilidad de la aplicación seguir el redireccionamiento ". – Shcheklein
¿Pero sigue la redirección de http a http o https a https? Incluso eso estaría mal. ¿No es así? – Enigma
@Enigma Puede configurar ese comportamiento [globalmente] (http://docs.oracle.com/javase/7/docs/api/java/net/HttpURLConnection.html#setFollowRedirects (boolean)) o en un [por instancia ] (http://docs.oracle.com/javase/7/docs/api/java/net/HttpURLConnection.html#setInstanceFollowRedirects (boolean)) base. Por defecto, * does * follow redirects si el esquema no cambia. – erickson