0

J'essaie d'utiliser l'API Apache HttpClient pour accéder aux pages du wiki Atlassian Confluence.Java 8: Authentification échouée d'Apache HttpClient

Voici mon code:

public class ConcfluenceTest{ 

    public static void main(String[] args) { 
     String pageID = "107544635"; 
     String hostName = "valid_hostname"; 
     String hostScheme = "https"; 
     String username = "verified_username"; 
     String password = "verified_password"; 
     int port = 443; 

     //set up the username/password authentication 
     BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); 
     credsProvider.setCredentials(
      new AuthScope(hostName, port, AuthScope.ANY_REALM, hostScheme), 
      new UsernamePasswordCredentials(username, password)); 

     HttpClient client = HttpClientBuilder.create() 
      .setDefaultCredentialsProvider(credsProvider) 
      .build(); 

     try { 

      HttpGet getRequest = new HttpGet("valid_url"); 
      System.out.println(getRequest.toString()); 

      HttpResponse response = client.execute(getRequest); 

      //Parse the response 
      BufferedReader rd = new BufferedReader(
       new  InputStreamReader(response.getEntity().getContent())); 
      StringBuffer result = new StringBuffer(); 
      String line = ""; 
      while ((line = rd.readLine()) != null) { 
       result.append(line); 
      } 

      System.out.println(result.toString()); 

     } catch (UnsupportedEncodingException e) { 
      System.out.println(e.getStackTrace()); 
     } catch (IOException e) { 
      System.out.println(e.getStackTrace()); 
     } 

    } 
} 

Lorsque je tente d'exécuter ce code, la réponse est imprimé le code HTML de l'écran de connexion, ce qui signifie que l'authentification a échoué. Ce code renvoie cependant la réponse correcte lorsque je lui fournisse l'URL d'une page qui n'est pas limitée aux utilisateurs enregistrés (par exemple, les informations d'identification ne sont pas requises). J'ai aussi essayé toutes les permutations de port/schéma.

Quelqu'un peut-il me dire ce qu'il me manque?

+0

Etes-vous sûr de l'API de Confluence est conçu pour fonctionner avec l'authentification de base? – thatidiotguy

+0

oui. J'ai utilisé l'authentification de base avec JIRA, et les exemples d'Atlassian avec Confluence utilisent l'authentification de base. – scottyseus

Répondre

0

AFAIK, si http-basic-auth est pris en charge, quelque chose comme

user:[email protected]:port/path 

devrait fonctionner aussi. Vous pouvez voir si cela fonctionne avec un navigateur.

Si Confluence doesnt soutien auth de base, utilisez Firebug pour découvrir l'action de la connexion forme (par exemple. Le chemin, quelque chose comme /dologin.action), la méthode (POST) et les noms de l'utilisateur/mot de passe champs .

Avec cette information, vous pouvez créer une demande comme ceci:

HttpPost httpPost = new HttpPost(fullFormActionUrlWithServerAndPort); 
List <NameValuePair> nvp = new ArrayList <NameValuePair>(); 
nvp.add(new BasicNameValuePair("name-of-the-user-field", "your-user-name")); 
nvp.add(new BasicNameValuePair("name-of-the-pass-field", "your-password")); 
httpPost.setEntity(new UrlEncodedFormEntity(nvp)); 
+0

'setEntity' n'est pas une méthode disponible pour la classe Apache' HttpGet' ... Je vais tester cela avec 'HttpPost'. – scottyseus

+0

Merci, j'ai été en mesure d'utiliser cela pour authentifier avec succès. – scottyseus