me encontré con el problema de la "URL funciona en el navegador, pero cuando lo hago http-get en Java consigo un 500 Error".
En mi caso el problema era que el http-get regulares terminó en un bucle de redireccionamiento infinita entre /default.aspx y /login.aspx
URL oUrl = new URL(url);
HttpURLConnection con = (HttpURLConnection) oUrl.openConnection();
con.setRequestMethod("GET");
...
int responseCode = con.getResponseCode();
Lo que estaba ocurriendo era: El servidor sirve una cookie de tres partes y con.getResponseCode() solo usó una de las partes. Los datos de las cookies en la cabecera eran los siguientes:
header.key = null
value = HTTP/1.1 302 Found
...
header.key = Location
value = /default.aspx
header.key = Set-Cookie
value = WebCom-lbal=qxmgueUmKZvx8zjxPftC/bHT/g/rUrJXyOoX3YKnYJxEHwILnR13ojZmkkocFI7ZzU0aX9pVtJ93yNg=; path=/
value = USE_RESPONSIVE_GUI=1; expires=Wed, 17-Apr-2115 18:22:11 GMT; path=/
value = ASP.NET_SessionId=bf0bxkfawdwfr10ipmvviq3d; path=/; HttpOnly
...
Así el servidor al recibir sólo un tercio de los datos necesarios se confundió: está conectado! No, espera, tienes que iniciar sesión. No, has iniciado sesión, ...
Para evitar el infinito redireccionamiento de bucle, tuve que buscar manualmente los redireccionamientos y analizar manualmente las entradas "Set-cookie" en el encabezado.
con = (HttpURLConnection) oUrl.openConnection();
con.setRequestMethod("GET");
...
log.debug("Disable auto-redirect. We have to look at each redirect manually");
con.setInstanceFollowRedirects(false);
....
int responseCode = con.getResponseCode();
Con este código al análisis sintáctico de la galleta, si conseguimos un redireccionamiento en el ResponseCode:
private String getNewCookiesIfAny(String origCookies, HttpURLConnection con) {
String result = null;
String key;
Set<Map.Entry<String, List<String>>> allHeaders = con.getHeaderFields().entrySet();
for (Map.Entry<String, List<String>> header : allHeaders) {
key = header.getKey();
if (key != null && key.equalsIgnoreCase(HttpHeaders.SET_COOKIE)) {
// get the cookie if need, for login
List<String> values = header.getValue();
for (String value : values) {
if (result == null || result.isEmpty()) {
result = value;
} else {
result = result + "; " + value;
}
}
}
}
if (result == null) {
log.debug("Reuse the original cookie");
result = origCookies;
}
return result;
}
500 es para el error interno del servidor –
¿cuál es 'theurl' que ha intentado? – sunil
@sunil Probé http://www.rassd.com/1-23544.htm – user1069624