Ошибка HTTP / 1.1 407 с последней версией Apache HttpClient 4.1.1 при использовании аутентификации NTLM - PullRequest
1 голос
/ 25 мая 2011

Я пытаюсь использовать библиотеку Apache HttpClient 4.1.1 (http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html) для доступа к сайтам из-за прокси-сервера моей компании, использующего ISA Server с проверкой подлинности NTLM, но я продолжаю получать ошибку HTTP 407 Proxy Authentication Required:

Фрагмент кода

    HttpHost proxy = new HttpHost("myProxyHost", 80, "http");
    DefaultHttpClient httpClient = new DefaultHttpClient();
    httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

    NTCredentials creds = new NTCredentials("myWindowsUserName", "myWindowsPwd", "localhost", "myCompanyDomain");
    AuthScope authScope = new AuthScope("myProxyHost", 80, "", "NTLM");
    httpClient.getCredentialsProvider().setCredentials(authScope, creds);

    HttpHost target = new HttpHost("www.google.com", 80, "http");
    HttpGet get = new HttpGet("/");
    System.out.println("executing request to " + target + " via " + proxy);
    HttpResponse rsp = httpClient.execute(target, get);

    System.out.println("----------------------------------------");
    System.out.println(rsp.getStatusLine());
    Header[] headers = rsp.getAllHeaders();
    for (int i = 0; i<headers.length; i++) {
        System.out.println(headers[i]);
    }
    System.out.println("----------------------------------------");

O / P

executing request to http://www.google.com:80 via http://myProxyHost:80
----------------------------------------
HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied.  )
Via: 1.1 myCompanyServer
Proxy-Authenticate: Negotiate
Proxy-Authenticate: Kerberos
Proxy-Authenticate: NTLM
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 4120  
----------------------------------------

Чего мне здесь не хватает?

Обновление: в той же среде работает код с использованием классов JDK URL и URLConnection!

Фрагмент рабочего кода

    System.setProperty("http.proxyHost", "myProxyHost");
    System.setProperty("http.proxyPort", "80");

    URL url = new URL("http://www.google.com");
    URLConnection con = url.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    in.close();

O /P

Google window.google={kEI:"_N3cTaLFMY6cvgOH9MypDw",...

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

У меня была похожая проблема с HttpClient 4.1.2.Для меня это было решено путем возврата к HttpClient 4.0.3.Я никогда не мог заставить NTLM работать с 4.1.2, используя встроенную реализацию или JCIFS.

1 голос
/ 25 мая 2011

Если у вас нет проблем с лицензионным программным обеспечением LGPL, вы можете попробовать использовать движок NTLM, разработанный проектом Samba JCIFS , вместо внутреннего, используемого Apache HttpClient по умолчанию.

См. Этот документ для подробных инструкций:

http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/src/site/apt/ntlm.apt

PS: JDK URL и классы URLConnection работают, потому что они используют вызовы, специфичные для платформы, при работе в Microsoft Windows

...