title: Unable to tunnel through proxy. Proxy returns “HTTP/1.1 407” via https
body: <p>I am faced with a curious behaviour of java6/8.
  I try to tunnel through a proxy which needs basic user authentication.
  Doing this by the standard java Authenticator.
  If I try to access a https url as the first url, an exception is thrown:</p>
  
  <p>java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"</p>
  
  <p>But if I access a http URL first and then the https URL, the https access works fine.</p>
  
  <p>Given that code:</p>
  
  <pre><code>import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.net.Authenticator;
  import java.net.HttpURLConnection;
  import java.net.InetSocketAddress;
  import java.net.PasswordAuthentication;
  import java.net.Proxy;
  import java.net.URL;
  
  public class ProxyPass {
      public ProxyPass( String proxyHost, int proxyPort, final String userid, final String password, String url ) {
  
      try {
              /* Create a HttpURLConnection Object and set the properties */
              URL u = new URL( url );
              Proxy proxy = new Proxy( Proxy.Type.HTTP, new InetSocketAddress( proxyHost, proxyPort ) );
              HttpURLConnection uc = (HttpURLConnection) u.openConnection( proxy );
  
              Authenticator.setDefault( new Authenticator() {
                  @Override
                  protected PasswordAuthentication getPasswordAuthentication() {
                      if (getRequestorType().equals( RequestorType.PROXY )) {
                          return new PasswordAuthentication( userid, password.toCharArray() );
                      }
                      return super.getPasswordAuthentication();
                  }
              } );
              uc.connect();
              /* Print the content of the url to the console. */
              showContent( uc );
          }
          catch (IOException e) {
              e.printStackTrace();
          }
      }
  
      private void showContent( HttpURLConnection uc ) throws IOException {
          InputStream i = uc.getInputStream();
          char c;
          InputStreamReader isr = new InputStreamReader( i );
          BufferedReader br = new BufferedReader( isr );
          String line;
          while ((line = br.readLine()) != null) {
              System.out.println( line );
          }
      }
  
      public static void main( String[] args ) {
          String proxyhost = "proxyHost";
          int proxyport = proxyPort;
          final String proxylogin = proxyUser;
          final String proxypass = proxyPass;
  
          String url = "http://www.google.de";
          String surl = "https://www.google.de";
  
  //            new ProxyPass( proxyhost, proxyport, proxylogin, proxypass, url );  // uncomment this line to see that the https request works!
  //            System.out.println( url + " ...ok" );   // uncomment this line to see that the https request works!
          new ProxyPass( proxyhost, proxyport, proxylogin, proxypass, surl );
          System.out.println( surl + " ...ok" );
      }
  </code></pre>
  
  <p>Any suggestions, ideas?</p>