我正在尝试访问需要身份验证的Web服务,但我也需要自己的身份验证代理。 能够通过代理服务器,因为我可以在Web服务URL没有身份验证时获得结果。但是,当Web服务需要身份验证时,它根本不起作用。我收到以下错误:
Exception in thread "main" java.net.ProtocolException: Server redirected too many times
以下是我的代码:
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
if(getRequestorType() == Authenticator.RequestorType.PROXY)
{ //for proxy
return (new PasswordAuthentication("user", "pass".toCharArray()));
}
else
{ // for web service
return (new PasswordAuthentication("user2", "pass2".toCharArray()));
}
}
};
Authenticator.setDefault(auth);
SocketAddress addr = new
InetSocketAddress("proxy addr", port no);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
URL url = new URL("...");
URLConnection yc = query.openConnection(proxy);
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
这是我的第一个问题。任何帮助将不胜感激。
答案 0 :(得分:2)
网址不一样。请求URL使用HTTP,重定向URL使用HTTPS。可能发生的是服务将重定向请求发送到代理,但代理仍然反复请求HTTP URL。有些代理是known to exhibit这种行为。
在初始请求中切换到使用HTTPS。我对相关服务器的HTTP调用导致重定向到HTTPS,而HTTPS调用导致401。
HTTP / 1.1 401不支持您提供的授权类型。 仅支持Basic和OAuth