PRB: Allowing the URL class to Access HTTPS in Applications

ID: Q191120


The information in this article applies to:
  • Microsoft SDK for Java, versions 2.0, 2.01, 2.02, 3.0, 3.0 Preview 1


SYMPTOMS

Attempting to open a HTTPS: URL in an application with the default URLStreamHandler will result in the following error message being generated:

java.net.MalformedURLException: unknown protocol: https at java/net/URL.<init> (URL.java)


CAUSE

The default URLStreamHandler for applications does not have the ability to access a URL via the HTTPS: protocol.


RESOLUTION

The com.ms.net.wininet.WininetStreamHandlerFactory class can be used to allow applications to access an HTTPS: URL. In an application, you can set the URLStreamHandlerFactory using the following command:


   java.net.URL.setURLStreamHandlerFactory(
      new com.ms.net.wininet.WininetStreamHandlerFactory()); 


STATUS

This behavior is by design.


MORE INFORMATION

The following Sample code demonstrates how to use the WininetStreamHandlerFactory in a Java application. You should change the line 'String page="..."' to point to a valid HTTPS Web server.

Sample Code


   import java.net.*;
   import java.io.*;

   public class HTTPS
   {

     public static void main(String args[]) {
   /*
     Install a URLStreamHandler that can handle the HTTPS: protocol.
   */ 
       try {
         if (Class.forName(
               "com.ms.net.wininet.WininetStreamHandlerFactory" )!=null)
           URL.setURLStreamHandlerFactory(new
               com.ms.net.wininet.WininetStreamHandlerFactory());
       } catch (ClassNotFoundException ex) {
         System.err.println(
           "Warning: WininetStreamHandlerFactory class not found.");
       }

       try {
   /*
     The following line assumes that you have a HTTPS: server on your
     local machine, with a Login.ASP page in the root directory. You
     can replace the following line with any valid HTTPS: URL.
   */ 
         String page="https://localhost/Login.asp";
         URL url=new URL(page);
         URLConnection connection=url.openConnection();
         connection.setAllowUserInteraction(true);
         DataInputStream dis=new DataInputStream(
                                   connection.getInputStream());
         String input;
         do {
           input=dis.readLine();
           if (input!=null)
           System.out.println(input);
         } while (input!=null);
         dis.close();
       } catch (IOException ex) {
         System.err.println("IOException, make sure the URL is valid.");
         ex.printStackTrace();
       }
     }
   } 
(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Derek Jamison, Microsoft Corporation

Additional query words:

Keywords : kbnetwork kbJava
Version : WINDOWS:2.0,2.01,2.02,3.0,3.0 Preview 1
Platform : WINDOWS
Issue type : kbprb


Last Reviewed: August 26, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.