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が返されます。HTTP407はプロキシ認証が必要であることを意味します。 proxyUserとproxyPasswordを設定しているときにこの問題が発生する理由。
間違ったパスワードを入力するとhttp 401が発生しますが、常に407が表示されます。これは、コードがユーザー名とパスワードを受け取らないことを意味します。上記のコードでは、user123はユーザー名で、passwD123はプロキシ認証のパスワードです。
http://blog.vinodsingh.com/2008/05/proxy-authentication-in-Java.html
Vinod Singh氏に感謝します。
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 ソリューションはVinod Singh氏に感謝します。 Javaのプロキシ認証は、通常の企業ネットワークがプロキシサーバー経由でインターネットアクセスを提供し、認証も必要になる場合があります。幸いなことにJavaはプロキシ認証を行う透過的なメカニズムを提供します。以下のような単純なクラスを作成します。
。
。
そして、コードがURLConnection-を開く前にこれらのコード行を配置します-Authenticator.setDefault(new ProxyAuthenticator("user", "password")); System.setProperty("http.proxyHost", "proxy Host"); System.setProperty("http.proxyPort", "port");
これで、すべての呼び出しがプロキシ認証を正常にパススルーします。
あなたが接続しているサイトがあなたを許可するためにユーザー名/パスワードも必要とする場合はどうでしょう。デフォルトのAuthenticator(Authenticator.setDefault)の設定は失敗します。外部サイトが認証されたユーザーを探すとき、私は推測します。
任意のビュー?....誰か?
Edit:1以前にこのコードを使用し、エラー(407)Proxy Authentication Requiredを取得していました。これは、認証が異なるホストから要求されたためだと思います。また、1人のホストに対して1人のユーザー/パスでデフォルトの認証システムを設定すると、他の要求ホストの認証は失敗します。昨日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
を使用する答えは、一般的な場合に正しいです。ただし、 Java 8u111 以降のHTTP 407の別の原因は、プロキシに対してBASIC認証を使用している場合です。
この場合、次のシステムプロパティを追加します。
-Djdk.http.auth.tunneling.disabledSchemes=
私はこれを以下から見つけました: https://confluence.atlassian.com/kb/basic-authentication-fails-for-outgoing-proxy-in-Java-8u111-909643110.html