2012-05-14 152 views
3

我有一个客户端通过https post将文件上传到服务器。它使用代理,这是我的代码apache httpclient + ntlm身份验证

public void upload() throws Exception { 

    //create default client 
    DefaultHttpClient client = new DefaultHttpClient(); 

    //set proxy authentication if specified 
    if (proxy.equals("yes") && proxyAuth.equals("yes")){ 
    client.getCredentialsProvider().setCredentials(
      new AuthScope(address, port), 
      new UsernamePasswordCredentials(proxyUsername, proxyPassword)); 
    } 

    //set proxy if specified 
    if (proxy.equals("yes")){ 
     HttpHost proxy = new HttpHost(address, port); 
     client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy); 
    } 

    HttpPost post = new HttpPost(url); 
    MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

    File dir = new File(inputFilePath); 
    File[] fileArray = dir.listFiles(); 
    File file = fileArray[0]; 

    FileBody uploadFilePart = new FileBody(file); 

    entity.addPart("file", uploadFilePart); 
    entity.addPart("username", new StringBody(username)); 
    entity.addPart("password", new StringBody(password)); 

    post.setEntity(entity); 

    //execute post and get response 
    String response = EntityUtils.toString(client.execute(post).getEntity(), "UTF-8"); 

    client.getConnectionManager().shutdown(); 

    log4j.info(response); 

    if(!response.substring(0, 3).equalsIgnoreCase("200")){ 
     Exception e = new Exception("An error has occurred server side: "); 
     throw e; 
    } 
} 

现在的问题是这完美的作品有时有有时我得到下面的错误。

org.apache.http.impl.client.AbstractAuthenticationHandler.selectScheme(AbstractAuthenticationHandler.java:149) - 身份验证方案NTLM不支持”

+0

你试过跟随http://hc.apache.org/httpcomponents-client-ga/ntlm.html说明? – DanLebrero

+0

你试过了。但仍然是相同的问题 – user732362

+0

如果您使用httpclient 3,您可以使用此工具来简化这种身份验证情况https://github.com/DovAmir/httpclientAuthHelper –

回答

1

尝试 - 取而代之的是: 新UsernamePasswordCredentials(在proxyUsername,对proxyPassword)

使用这样的: 新NTCredentials(在proxyUsername,对proxyPassword, “localhostname”, “域”)