1 Reply Latest reply on Apr 29, 2013 8:24 AM by EJP

    Send a request using Http(s)URLConnection through proxy issue

      Hi all,

      Here are system environment,
      OS: Ubuntu 12.04
      Java version: 1.6.0_27
      OpenJDK Runtime Environment (IcedTea6 1.12.4) (6b27-1.12.4-1ubuntu1)
      OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

      There are 3 roles introduction as below:
      1. A https client: It can not direct connect to https server. Because it is restricted in a enclosed network environment just like intranet(ip is only way out is proxy server.
      2. A proxy server: Locate between https client and https server. It have two network interfaces(ip are and
      3. A https server: It is on extranet(ip is and it also cannot connect to https client directly.

      The other network environment setup is: There is no DNS server on https client network environment.

      The following is part of https client code section:
              public static void main(String args[]){
                 String proxyIp ="";// proxy server IP
              private static void testConn(String proxyIp){
                      String httpsURL="";
                      setSSLContext();// I thought this is not root cause so I do not post on
                        InetAddress intIPAdd= InetAddress.getByAddress(convStrToByte(proxyIp));
                        InetSocketAddress proxyInetAddr = new InetSocketAddress(intIPAdd,80);
                        Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyInetAddr);
                        URL httpsUrl = new URL(httpsURL);
                        HttpsURLConnection httpsCon = (HttpsURLConnection) httpsUrl.openConnection(proxy);
                        System.out.println("Get OutPutStream start!");
                        OutputStream out = httpsCon.getOutputStream(); // or httpsCon.connect();
                        System.out.println("Get OutPutStream done!");
                        OutputStreamWriter owriter = new OutputStreamWriter(out);
              private static byte[]  convStrToByte(String ip){
              String str[] = ip.split("\\.");
              byte[] ipAry = new byte[str.length];
                for(int i=0;i<str.length;i++){
                  ipAry[i] = (byte) Integer.parseInt(str, 10);
      return ipAry;

      All right, my problem is, while print out "Get OutPutStream start" untill "Get OutPutStream done", it always takes about 5 secs.
      No Error or exception. It was just hanging there approx 5 secs.
      I observed the packets flow with wireshark.
      Found out that hang time is to send a multicast to ask MDNS the proxy IP. No one reply this message. It would ask 3 times and then send request to proxy.
      About https trust and authentication issue. I use *All Trust* solution. because https server use self-signed CA by myself.
      If need, I would update this post with code section of setSSLContext() part.
      I wondering to know that I create proxy object using *InetSocketAddress(InetAddress addr, int port)*, or I create proxy ip instance using *public static InetAddress getByAddress(byte[] addr)* why it would ask to MDNS for proxy ip?
      On normal concept, I give an ip address and it do not need to resolve this ip for domain name.
      Check InetAddress getByAddress(byte[] addr) of JAVA SE6 API:
      It says: 'This method doesn't block, i.e. no reverse name service lookup is performed.'
      What can I do to let https client don't need to ask MDNS?
      Thank you guys so much.
      Edited by: 1002346 on 2013/4/29 上午 12:05