2

我正在尝试访问需要身份验证的 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();

这是我在这里的第一个问题。任何帮助将非常感激。

4

1 回答 1

2

URL 不一样。请求 URL 使用 HTTP,重定向 URL 使用 HTTPS。可能发生的情况是服务将重定向请求发送到代理,但代理仍然一遍又一遍地请求 HTTP URL。已知一些代理会表现出这种行为。

在初始请求中切换到使用 HTTPS。我对相关服务器的 HTTP 调用导致重定向到 HTTPS,而 HTTPS 调用导致 401。

HTTP/1.1 401 您提供的授权类型不受支持。仅支持 Basic 和 OAuth

于 2013-03-31T19:30:17.170 回答