AnsweredAssumed Answered

récupération de fichier via download url avec httpclient

Question asked by gballanger on Oct 12, 2010
Latest reply on Oct 14, 2010 by rguinot
Bonjour,

je dois réaliser un programme en java me permettant de downloader des fichier d'un repo alfresco.
Pour cela je dispose de l'url de téléchargement (http://alfresco:8080/alfresco/d/a/workspace/SpacesStore/86d4cf1a-1c66-4628-a934-e7a759556aec/Alfresco_user_guide.odt) et d'un utilisateur admin (appelons le theadmin/thepassword)


package com.download;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;


public class DownloadAlfrescoFile {

   public static void main(String[] args) {

      Credentials creds = new UsernamePasswordCredentials("theadmin", "thepassword");

      HttpClient httpClient = new HttpClient();

      //httpClient.getParams().setAuthenticationPreemptive(true);

      httpClient.getState().setCredentials(
            new AuthScope(AuthScope.ANY_HOST, 8080, AuthScope.ANY_REALM), creds);

      GetMethod getMethod = new GetMethod(
            "http://alfresco:8080/alfresco/d/a/workspace/SpacesStore/86d4cf1a-1c66-4628-a934-e7a759556aec/Alfresco_user_guide.odt");

      getMethod.setDoAuthentication(true);

      try {
         // execute the GET
         int status = httpClient.executeMethod(getMethod);

         // print the status and response
         System.out.println("get result:" + status);

         InputStream instream = getMethod.getResponseBodyAsStream();
         int l;
         byte[] tmp = new byte[2048];

         File tmpFile = new File("/tmp/Alfresco_user_guide.odt");
         OutputStream os = new FileOutputStream(tmpFile);

         while ((l = instream.read(tmp)) != -1) {
            os.write(tmp, 0, l);
         }
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         // release any connection resources used by the method
         getMethod.releaseConnection();
      }
   }
}

ce code me renvoie le status 401 et un fichier vide.

si je décommante la ligne

httpClient.getParams().setAuthenticationPreemptive(true);

j'obtiens le status 200 mais le fichier contiens la page de login en HTML (et pas le document openoffice esconté)

Pour info le repo alfresco est configuré avec des utilisateurs venant d'un LDAP/AD (pas de gestion native de user par alfresco)

la tentative ne génère aucun log sur le server.

Une idée ?

Outcomes