требуется аутентификация прокси-сервера http 407: как обрабатывать код java
System.setProperty("http.proxySet", "true");
System.setProperty("java.net.useSystemProxies", "true");
System.setProperty("http.proxyHost", "192.168.1.103");
System.setProperty("http.proxyPort", "3128");
System.setProperty("http.proxyUser", "user123");
System.setProperty("http.proxyPassword", "passwD123");
url = new URL("http://www.google.co.in");
каждый раз, когда я использую этот код IOException бросает, которые говорят код ответа HTTP 407.
HTTP 407 означает, что требуется аутентификация прокси. почему эта проблема возникает, когда я устанавливаю proxyUser и proxyPassword.
http 401 произойдет, если я поставлю неправильный пароль, но он всегда дает мне 407, означает, что мой код не принимает имя пользователя и пароль. В приведенном выше коде user123-это имя пользователя, а passwD123-пароль для аутентификации прокси.
3 ответов
http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html
Я нашел решение благодаря г-ну Виноду Сингху.
аутентификация прокси в Java
обычные корпоративные сети доступ в интернет через прокси-серверы и порой они требуют проверки. Могут ли приложения открывать подключения к серверам, которые являются внешними для корпоративной интрасети. Таким образом, нужно сделать аутентификацию прокси программно. К счастью, Java предоставляет прозрачный механизм для проверки подлинности прокси.
создайте простой класс, как показано ниже -
import java.net.Authenticator;
class ProxyAuthenticator extends Authenticator {
private String user, password;
public ProxyAuthenticator(String user, String password) {
this.user = user;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password.toCharArray());
}
}
и поместите эти строки кода, прежде чем ваш код откроет URLConnection-
Authenticator.setDefault(new ProxyAuthenticator("user", "password"));
System.setProperty("http.proxyHost", "proxy host");
System.setProperty("http.proxyPort", "port");
теперь все вызовы будут успешно пройти проверку подлинности прокси-сервера.
@GauravDS Вы упомянули:
http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html
Я нашел решение благодаря Мистеру Виноду Сингху.
Аутентификация прокси в Java
Обычные корпоративные сети предоставляют доступ в интернет через прокси-серверы, а иногда и требуют аутентификации. Могут ли приложения открывать подключения к серверам, которые являются внешними для корпоративной интрасети. Таким образом, нужно сделать аутентификацию прокси программно. К счастью Java предоставляет прозрачный механизм для проверки подлинности прокси-сервера.
Создать простой класс, как показано ниже-
.
.
.
и поместите эти строки кода, прежде чем ваш код откроет URLConnection-
Authenticator.setDefault(new ProxyAuthenticator("user", "password"));
System.setProperty("http.proxyHost", "proxy host");
System.setProperty("http.proxyPort", "port");
Теперь все вызовы будут успешно проходить через прокси-аутентификацию.
Что делать, если сайт, к которому вы подключаетесь, также требует имени пользователя / пароля, чтобы позволить вам. Установка средства проверки подлинности по умолчанию (Authenticator.setDefault) потерпит неудачу, я думаю, когда внешний сайт будет выглядеть для аутентифицированного пользователя.
какие мнения?....Кто-то ?
Edit: 1 Использовал этот код ранее и получал требуемую проверку подлинности прокси-сервера error (407). Я считаю, что это было потому, что аутентификация была запрошена разными хостами. и когда вы устанавливаете Аутентификатор по умолчанию с одним пользователем / пропуском для одного хоста, аутентификация не будет выполнена для другого запрашивающего хоста. Вчера я внес следующее изменение в класс SimpleAuthenticator, и теперь он работает как обаяние.
protected PasswordAuthentication getPasswordAuthentication()
{
String requestingHost = getRequestingHost();
if (requestingHost == proxyHost){
System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost );
return new PasswordAuthentication(proxyuser,proxypass.toCharArray());
}
else{
System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost );
return new PasswordAuthentication(sharepointusername,sharepointpassword.toCharArray());
}
}
дополнительная информация здесь: http://blog.ashwani.co.in/blog/2013-07-29/access-sharepoint-webservices-from-java-behind-proxy/
ответ на использование Authenticator
верно для общего случая. Однако другая причина HTTP 407 в Java 8u111 и позже, если вы используете базовую аутентификацию против прокси-сервера.
в этом случае добавьте это системное свойство:
-Djdk.http.auth.tunneling.disabledSchemes=
я узнал это из: https://confluence.atlassian.com/kb/basic-authentication-fails-for-outgoing-proxy-in-java-8u111-909643110.html