2016-04-05 12 views
0

WinHttpClientとGET要求を使用するときにntlm認証を必要とするサービスに正常に認証できました。しかし、POSTを実行しようとすると、私は常に401のリターンコードを取得します。誰もこれを前に正常にやったことがありますか?Apache HTTPコンポーネントからWinHttpClientを使用する

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(); 
    } 
} 

}

答えて

0

それはで利用可能であるかどうかを確認できます。

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

もしそうでなければ、クラスパスにjna.jarがない可能性があります。それはjnaに依存しており、not there, see source codeの場合は上記にfalseを黙って返します。

+0

POSTではなくGETで動作するため利用可能です – Radford7821

関連する問題