tutorial mvc mediante libro framework español ejemplos desarrollo books aplicaciones java android

java - mvc - Solicitudes HTTP con autenticación básica.



spring java tutorial (4)

Tengo que descargar y analizar archivos XML del servidor http con autenticación HTTP básica. Ahora lo estoy haciendo de esta manera:

URL url = new URL("http://SERVER.WITHOUT.AUTHENTICATION/some.xml"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(url.openStream())); doc.getDocumentElement().normalize();

Pero de esa manera no puedo obtener el documento xml (o simplemente no lo sé) del servidor con autenticación http.

Le estaré muy agradecido si puede mostrarme la mejor y más fácil manera de alcanzar mi meta.


Puede utilizar un Authenticator . Por ejemplo:

Authenticator.setDefault(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication( "user", "password".toCharArray()); } });

Esto establece el Authenticator predeterminado y se utilizará en todas las solicitudes. Obviamente, la configuración es más complicada cuando no necesita credenciales para todas las solicitudes o un número de credenciales diferentes, tal vez en diferentes hilos.

Alternativamente, puede usar un DefaultHttpClient donde una solicitud GET con autenticación HTTP básica sería similar a:

HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://foo.com/bar"); httpGet.addHeader(BasicScheme.authenticate( new UsernamePasswordCredentials("user", "password"), "UTF-8", false)); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity responseEntity = httpResponse.getEntity(); // read the stream returned by responseEntity.getContent()

Recomiendo usar este último porque le da mucho más control (por ejemplo, método, encabezados, tiempos de espera, etc.) sobre su solicitud.


Utilice HttpClient. La documentación para realizar descargas con HTTP AUTH está here . La documentación para obtener un resultado de cadena está here . Luego, analice su cadena (lo ideal sería usar SAX, sin embargo, no DOM).


public String reloadTomcatWebApplication(String user, String pwd, String urlWithParameters, boolean returnResponse) { URL url = null; try { url = new URL(urlWithParameters); } catch (MalformedURLException e) { System.out.println("MalformedUrlException: " + e.getMessage()); e.printStackTrace(); return "-1"; } URLConnection uc = null; try { uc = url.openConnection(); } catch (IOException e) { System.out.println("IOException: " + e.getMessage()); e.printStackTrace(); return "-12"; } String userpass = user + ":" + pwd; String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes()); uc.setRequestProperty("Authorization", basicAuth); InputStream is = null; try { is = uc.getInputStream(); } catch (IOException e) { System.out.println("IOException: " + e.getMessage()); e.printStackTrace(); return "-13"; } if (returnResponse) { BufferedReader buffReader = new BufferedReader(new InputStreamReader(is)); StringBuffer response = new StringBuffer(); String line = null; try { line = buffReader.readLine(); } catch (IOException e) { e.printStackTrace(); return "-1"; } while (line != null) { response.append(line); response.append(''/n''); try { line = buffReader.readLine(); } catch (IOException e) { System.out.println(" IOException: " + e.getMessage()); e.printStackTrace(); return "-14"; } } try { buffReader.close(); } catch (IOException e) { e.printStackTrace(); return "-15"; } System.out.println("Response: " + response.toString()); return response.toString(); } return "0"; }


  • DefaultHttpClient en desuso
  • addHeader debe tener 2 parámetros

Bloque de código actualizado usando HttpClient 4.5.2

HttpClient httpClient = HttpClientBuilder.create().build(); HttpGet httpGet = new HttpGet("https://test.com/abc.xyz"); httpGet.addHeader("Authorization", BasicScheme.authenticate(new UsernamePasswordCredentials("login", "password"), "UTF-8")); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity responseEntity = httpResponse.getEntity();