java - example - httpurlconnection post
Obteniendo "java.net.ProtocolException: el servidor redirigido demasiadas veces" Error (4)
Aparentemente está redirigiendo en un bucle infinito porque no mantienes la sesión del usuario. La sesión generalmente está respaldada por una cookie. Necesita crear un CookieManager
antes de usar URLConnection
.
// First set the default cookie manager.
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
// All the following subsequent URLConnections will use the same cookie manager.
URLConnection connection = new URL(url).openConnection();
// ...
connection = new URL(url).openConnection();
// ...
connection = new URL(url).openConnection();
// ...
Ver también:
Estoy haciendo una solicitud de URL simple con un código como este:
URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
Pero en la última línea, recibo el error "redirigido demasiadas veces". Si mi var de "página web" es, por ejemplo, google.com, funciona bien, pero cuando intento usar la URL de mi servlet, falla. Parece que puedo ajustar el número de veces que sigue las redirecciones (por defecto es 20) con esto:
System.setProperty("http.maxRedirects", "100");
Pero cuando lo enciendo hasta, digamos, 100, definitivamente lleva más tiempo lanzar el error, así que sé que lo está intentando. Sin embargo, la URL de mi servlet funciona bien en (cualquier) navegador y usando la opción "persistir" en firebug, parece que solo está redirigiendo una vez.
Un poco más de información sobre mi servlet ... se está ejecutando en tomcat y liderado por apache usando ''mod-proxy-ajp''. También cabe destacar que está utilizando la autenticación de formularios, por lo que cualquier URL que ingrese debe redirigirlo a la página de inicio de sesión. Como dije, esto funciona correctamente en todos los navegadores, pero por alguna razón la redirección no funciona con URLConnection en Java 6.
Gracias por leer ... ¿ideas?
Duse, agregué estas líneas:
java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);
Mira este ejemplo:
java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);
String buf="";
dk = new DAKABrowser(input.getText());
try {
URL url = new URL(dk.toURL(input.getText()));
DataInputStream dis = new DataInputStream(url.openStream());
String inputLine;
while ((inputLine = dis.readLine()) != null) {
buf+=inputLine;
output.append(inputLine+"/n");
}
dis.close();
}
catch (MalformedURLException me) {
System.out.println("MalformedURLException: " + me);
}
catch (IOException ioe) {
System.out.println("IOException: " + ioe);
}
titulo.setText(dk.getTitle(buf));
Estaba usando Jenkins en Tomcat6 en un entorno Unix y obtuve este error. Por alguna razón, la actualización a Java7 lo resolvió. Me interesaría saber exactamente por qué lo solucionó.
Me enfrenté al mismo problema y me llevó bastante tiempo entender el problema. Entonces, para resumir, el problema estaba en la falta de coincidencia de los encabezados.
Considera a continuación ser mi recurso
@GET
@Path("booksMasterData")
@Produces(Array(core.MediaType.APPLICATION_JSON))
def booksMasterData(@QueryParam("stockStatus") stockStatus : String): Response = {
// some logic here to get the books and send it back
}
Y aquí está el código del cliente, que estaba tratando de conectarse a mi recurso anterior
ClientResponse clientResponse = restClient.resource("http://localhost:8080/booksService").path("rest").path("catalogue").path("booksMasterData").accept("application/boks-master-data+json").get(ClientResponse.class);
Y el error estaba llegando exactamente arriba de la línea.
¿Cual fue el problema?
Mi recurso estaba usando
"aplicación / json"
en
@ Produce anotación
y mi cliente estaba usando
accept ("application / boks-master-data + json") y este era el problema.
Me llevó mucho tiempo descubrir esto ya que el error no estaba relacionado. La ruptura fue cuando intenté acceder a mi recurso en cartero con
Aceptar-> cabecera "application / json"
funcionó bien, sin embargo con
El encabezado Aceptar-> "application / boks-master-data + json" no funciona.
Y de nuevo, incluso Postman no me estaba dando el error correcto. El error fue demasiado genérico. Por favor, mira la imagen a continuación para referencia.