Erreur "HTTP / 1.1 401 Non autorisé" avec l'authentification de base dans Android – EWS 2010

Je me réfère à ce lien pour demander au serveur. Le problème est quelque temps (pas toujours, environ 20% – 30%, signifie quelque temps que je peux obtenir une réponse réussie), j'ai eu l'erreur d'erreur 401 et le défi d'autorisation de base du serveur attendu, mais pas trouvé .

Voici mon code:

  • Android NDK: load_library: impossible de localiser srand
  • Android httprequest java.net.UnknownHostException
  • Comment activer une préférence dans mon application Android lorsque d'autres préférences sont désactivées?
  • Erreur de compilation des tests Android: plusieurs fichiers dex définissent Landroid / support / test / BuildConfig
  • Opencv augmentation de précision du seuil
  • Android - Soft Keyboard pousse la mise en page de mon activité hors de l'écran
  • HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() { public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException { AuthState authState = (AuthState) context .getAttribute(ClientContext.TARGET_AUTH_STATE); CredentialsProvider credsProvider = (CredentialsProvider) context .getAttribute(ClientContext.CREDS_PROVIDER); HttpHost targetHost = (HttpHost) context .getAttribute(ExecutionContext.HTTP_TARGET_HOST); if (authState.getAuthScheme() == null) { AuthScope authScope = new AuthScope(targetHost.getHostName(), targetHost.getPort()); Credentials creds = credsProvider.getCredentials(authScope); if (creds != null) { authState.setAuthScheme(new BasicScheme()); authState.setCredentials(creds); } } } }; 

    Voici mon authentification:

      HttpPost httpPost = new HttpPost(SERVER_AUTH_URL); httpPost.setHeader("Content-type", "text/xml; charset=utf-8"); httpPost.setHeader("Keep-Alive", "300"); httpPost.setHeader("Connection", "Keep-Alive"); StringEntity se = new StringEntity(myRequest, "UTF-8"); httpPost.setEntity(se); se.setContentType("text/xml"); se.setContentEncoding("gzip,deflate"); //add preemptiveAuth client.addRequestInterceptor(preemptiveAuth, 0); //Set the proxy ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner( client.getConnectionManager().getSchemeRegistry(), ProxySelector.getDefault()); client.setRoutePlanner(routePlanner); List<String> authPrefs = new ArrayList<String>(); authPrefs.add(AuthPolicy.BASIC); authPrefs.add(AuthPolicy.NTLM); authPrefs.add(AuthPolicy.DIGEST); client.getParams().setParameter("http.auth.scheme-priority", authPrefs); CredentialsProvider credProvider = new BasicCredentialsProvider(); // client.getParams().setParameter("http.auth.scheme-priority", // authPrefs); credProvider.setCredentials(AuthScope.ANY, new NTCredentials(getUsername(), getPassword(), "", getDomain())); Log.d(TAG, "repair excute"); client.setCredentialsProvider(credProvider); HttpResponse response = client.execute(httpPost); Log.d(TAG, "has excute"); 

    À partir du code de commentaire, vous pouvez voir que j'ai essayé plusieurs façons, mais l'erreur n'a pas disparu. Voici logcat dis:

      05-02 10:28:21.724: D/dalvikvm(1169): GC_FOR_MALLOC freed 11259 objects / 457352 bytes in 43ms 05-02 10:28:22.384: D/MainActivity(1169): repair excute 05-02 10:28:22.744: D/dalvikvm(1169): GC_FOR_MALLOC freed 11481 objects / 447264 bytes in 67ms 05-02 10:28:22.894: D/dalvikvm(1169): GC_FOR_MALLOC freed 1078 objects / 83928 bytes in 76ms 05-02 10:28:22.894: I/dalvikvm-heap(1169): Grow heap (frag case) to 3.833MB for 87396-byte allocation 05-02 10:28:23.034: D/dalvikvm(1169): GC_FOR_MALLOC freed 58 objects / 3336 bytes in 143ms 05-02 10:28:23.124: W/DefaultRequestDirector(1169): Authentication error: basic authorization challenge expected, but not found 05-02 10:28:23.124: D/MainActivity(1169): has excute 05-02 10:28:23.124: E/MainActivity(1169): response error: HTTP/1.1 401 Unauthorized 

    Alors, dites-moi où est mon problème. Merci d'avance.
    Mise à jour : le serveur cible est Exchange Web Service 2010. Pour une raison quelconque, je ne veux pas utiliser l'API EWS, j'ai fait ma propre demande xml pour me connecter au serveur (cette requête xml fonctionne correctement).
    Et voici l'en-tête de réponse du serveur Lorsque la demande a échoué:

     Server Microsoft-IIS/7.5 WWW-Authenticate Negotiate WWW-Authenticate NTLM X-Powered-By ASP.NET Date Fri, 25 May 2012 03:47:57 GMT Content-Length 0 

    Lorsque la demande réussit la première fois:

     Cache-Control private Transfer-Encoding chunked Content-Type text/xml; charset=utf-8 Server Microsoft-IIS/7.5 Set-Cookie exchangecookie=1d9d9b1d21064035ad375c8aecde2168; expires=Sat, 25-May-2013 04:00:46 GMT; path=/; HttpOnly X-AspNet-Version 2.0.50727 X-Powered-By ASP.NET Date Fri, 25 May 2012 04:00:45 GMT 

    Et la deuxième fois:

     Cache-Control private Transfer-Encoding chunked Content-Type text/xml; charset=utf-8 Server Microsoft-IIS/7.5 X-EwsPerformanceData RpcC=4;RpcL=0;LdapC=0;LdapL=0; X-AspNet-Version 2.0.50727 X-Powered-By ASP.NET Date Fri, 25 May 2012 04:00:47 GMT 

    Le cookie est mon problème, n'est-ce pas?

    One Solution collect form web for “Erreur "HTTP / 1.1 401 Non autorisé" avec l'authentification de base dans Android – EWS 2010”

    Je me suis heurté avec Android HTTP basic la semaine dernière. J'ai essayé peut-être 3 ou 4 façons différentes de le faire et j'ai toujours trouvé un problème. À l'heure actuelle, la seule façon de réussir à fonctionner était la manière la plus simple.

      UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(user, pass); Header header = new BasicScheme().authenticate(credentials, mHttpRequest); mHttpRequest.addHeader(header); 

    Cela a fonctionné pour moi avec AndroidHttpClient.

    Modifier:

    C'est mon code source complet

    https://gist.github.com/2642692

    Il est basé sur http://lukencode.com/2010/04/27/calling-web-services-in-android-using-httpclient/

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.