2012-05-14 5 views
3

У меня есть клиент для загрузки файла на сервер через пост https. Он использует прокси-сервер, и это мой код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", "домен")

Смежные вопросы