2016-04-05 1 views
0

J'ai réussi à m'authentifier auprès d'un service qui nécessite une authentification ntlm lors de l'utilisation de WinHttpClients et d'une requête GET. Cependant quand j'essaye de faire un POST j'obtiens toujours un code de retour 401. Est-ce que quelqu'un l'a déjà fait avec succès?Utilisation de WinHttpClients à partir de composants Http Apache

import java.io.IOException; 
import java.io.UnsupportedEncodingException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpHost; 
import org.apache.http.auth.AuthScope; 
import org.apache.http.auth.NTCredentials; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.CredentialsProvider; 
import org.apache.http.client.methods.CloseableHttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.protocol.HttpClientContext; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.BasicCredentialsProvider; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.WinHttpClients; 


public class WindowsAuthPOst { 

public static void main (String []args) throws Exception, IOException 
{ 
    org.apache.log4j.BasicConfigurator.configure(); 
    CloseableHttpClient httpclient = WinHttpClients.createDefault(); 

    HttpHost target = new HttpHost("SomeHost.domain", 443, "https"); 

    HttpClientContext context = HttpClientContext.create(); 
    HttpGet httpget = new HttpGet("/some/Service.svc"); 
    CloseableHttpResponse response1 = httpclient.execute(target, httpget, context); 
    try { 
     HttpEntity entity1 = response1.getEntity(); 
    } finally { 
     response1.close(); 
    } 

    // Execute an expensive method next reusing the same context (and connection) 
    HttpPost httppost = new HttpPost("/some/Service.svc"); 
    httppost.setHeader("SOAPAction", "Some Soap Action"); 
    httppost.setEntity(new StringEntity("Soap Payload")); 
    CloseableHttpResponse response2 = httpclient.execute(target, httppost, context); 
    try { 
     HttpEntity entity2 = response2.getEntity(); 
    } finally { 
     response2.close(); 
    } 
} 

}

Répondre

0

Vous pouvez vérifier si elle est disponible avec.

if (!WinHttpClients.isWinAuthAvailable()) { 
     System.out.println("Integrated Win auth is not supported!!!"); 
    } 

Dans le cas contraire, il se pourrait que vous n'avez pas jna.jar dans votre classpath. Cela dépend de jna et retournera silencieusement false sur le dessus si not there, see source code.

+0

Il est disponible parce que cela fonctionne pour GET juste pas POST – Radford7821