• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 670
  • Last Modified:

How to proxy server throw java program



Hi ,

How to set proxy server throw java program .

I tried with system.property() and proxy class not use ?

is it any other way ??
0
Sathish David  Kumar N
Asked:
Sathish David  Kumar N
  • 8
  • 8
  • 4
  • +1
5 Solutions
 
CEHJCommented:
http://download.oracle.com/javase/1.4.2/docs/guide/net/properties.html

See proxyHost and proxyPort. What did you do and for what purpose?
0
 
Sathish David Kumar NArchitectAuthor Commented:
>>>>>>>t. What did you do and for what purpose?

For web services call , Hvaing problem with firewall so that only i want to set proxy !
System.getProperties().put("http.proxyHost", "xxxx");

i alerday use that link its not working ..... :(
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
Sathish David Kumar NArchitectAuthor Commented:
System.setProperty("http.proxyHost", xxxx);
0
 
objectsCommented:
depends what you are using to make connection, many don't use it.

httpclient has a setProxy() method you can use
http://helpdesk.objects.com.au/java/how-to-get-httpclient-to-use-a-proxy-server
0
 
CEHJCommented:
Make sure the proxy is running and accepting connections
0
 
Sathish David Kumar NArchitectAuthor Commented:
How to check that ??
0
 
CEHJCommented:
Try


telnet <address> <port>
0
 
Sathish David Kumar NArchitectAuthor Commented:
Hostconfig() not avaliable in HttpClient ?
0
 
CEHJCommented:
Are you actually using HttpClient?
0
 
Sathish David Kumar NArchitectAuthor Commented:
Ya its connecting .... i tried in cmd promt it connect blank screen is coming
0
 
CEHJCommented:
It might be worth making a little test app to make a simple http request through the proxy, if only to check that it works properly and doesn't require authentication (which you'd have to implement)
0
 
Sathish David Kumar NArchitectAuthor Commented:
is that correct ??
0
 
CEHJCommented:
Is what correct?
0
 
Sathish David Kumar NArchitectAuthor Commented:
Ya its connecting .... i tried in cmd promt it connect blank screen is coming


is that correct ?
0
 
CEHJCommented:
Yes it should indicate that it's running but i'd follow my last suggestion
0
 
objectsCommented:
see the following if you need authentication
http://helpdesk.objects.com.au/java/how-to-specify-authentication-details-for-proxy-server

I'd suggest using httpclient to make the connection, it provides good proxy support
0
 
Sathish David Kumar NArchitectAuthor Commented:
@chj : HOw to test that ??

@Object : getHiostConfig() not avaliable ??
0
 
GenroseSusaiCommented:
Connect through a Proxy

The Networking Properties

You have to set the following properties :
http.proxyHost (default: <none>)
http.proxyPort (default: 80 if http.proxyHost specified)
http.nonProxyHosts (default: <none>)
NOTE: proxyHost, proxyPort are deprecated. you have to prefix them with "http.".
NOTE: Those properties are documented here : http://java.sun.com/javase/6/docs/technotes/guides/net/properties.html.
You can set the required properties when starting the JVM for a JAVA application from the command line:

java  -Dhttp.proxyHost=myproxyserver.com  -Dhttp.proxyPort=80 MyJavaApp
Or in your source :
System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");
Since Java 1.5 you can also pass a java.net.Proxy instance to the openConnection() method:
//Proxy instance, proxy ip = 123.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();
       
String page;
StringBuffer tmp = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
while ((line = in.readLine()) != null){
   page.append(line + "\n");
}
System.out.println(page);
so you don't need to set system properties.
You can use the default PROXY as defined by your networking settings.

System.setProperty("java.net.useSystemProxies", "true");
List l = null;
try {
  l = ProxySelector.getDefault().select(new URI("http://www.yahoo.com"));
}
catch (URISyntaxException e) {
  e.printStackTrace();
}

if (l != null) {
   for (Iterator iter = l.iterator(); iter.hasNext() {
      java.net.Proxy proxy = (java.net.Proxy) iter.next();
      System.out.println("proxy hostname : " + proxy.type());
      InetSocketAddress addr = (InetSocketAddress) proxy.address();
      if (addr == null) {
        System.out.println("No Proxy");
      }
      else {
        System.out.println("proxy hostname : " + addr.getHostName());
        System.out.println("proxy port : " + addr.getPort());
      }
   }
}
To bypass the PROXY,
URL url = new URL("http://internal.server.local/");
URLConnection conn = url.openConnection(Proxy.NO_PROXY);
Proxy and Username/Password

You might need to identify yourself to the proxy server.

One way is to use the HTTP property "Proxy-Authorization" with a username:password base64 encoded.

System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");
URL url=new URL("http://someserver/somepage");
URLConnection uc = url.openConnection ();
String encoded = new String
      (Base64.base64Encode(new String("username:password").getBytes()));
uc.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
uc.connect();
NOTE: For a base64 function, see this How-to.
The following example dumps the content of a URL but before we identify ourself to the proxy.
import java.net.*;
import java.io.*;

public class URLUtils {
  public static void main(String s[]) {
    URLUtils.dump("http://www.yahoo.com");
    System.out.println("**************");
    URLUtils.dump("https://www.paypal.com");
    System.out.println("**************");
  }

  public static void dump(String URLName){
    try {
      DataInputStream di = null;
      FileOutputStream fo = null;
      byte [] b = new byte[1];

      // PROXY
      System.setProperty("http.proxyHost","proxy.mydomain.local") ;
      System.setProperty("http.proxyPort", "80") ;

      URL u = new URL(URLName);
      HttpURLConnection con = (HttpURLConnection) u.openConnection();
      //
      // it's not the greatest idea to use a sun.misc.* class
      // Sun strongly advises not to use them since they can
      // change or go away in a future release so beware.
      //
      sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
      String encodedUserPwd =
         encoder.encode("mydomain\\MYUSER:MYPASSWORD".getBytes());
      con.setRequestProperty
         ("Proxy-Authorization", "Basic " + encodedUserPwd);
      // PROXY ----------

      di = new DataInputStream(con.getInputStream());
      while(-1 != di.read(b,0,1)) {
         System.out.print(new String(b));
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}
With JDK1.2, the java.net.Authenticator can be used to send the credentials when needed.
public static void dump(String URLName){
  try {
    DataInputStream di = null;
    FileOutputStream fo = null;
    byte [] b = new byte[1];
 
    // PROXY
    System.setProperty("http.proxyHost","proxy.mydomain.local") ;
    System.setProperty("http.proxyPort", "80") ;
 
    Authenticator.setDefault(new Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
        return new
           PasswordAuthentication("mydomain\\username","password".toCharArray());
    }});
 
    URL u = new URL(URLName);
    HttpURLConnection con = (HttpURLConnection) u.openConnection();
    di = new DataInputStream(con.getInputStream());
    while(-1 != di.read(b,0,1)) {
       System.out.print(new String(b));
    }
  }
  catch (Exception e) {
          e.printStackTrace();
  }
}
Bypass a Proxy

In intranet environment, you may need to bypass the proxy server and go directly to the http server.

The http.nonProxyHosts property indicates the hosts which should be connected too directly and not through the proxy server. The value can be a list of hosts, each seperated by a |, and in addition a wildcard character (*) can be used for matching.

java.exe  
   -Dhttp.nonProxyHosts="*.mycompany.com|*.mycompany.local|localhost"
      MyClass
0
 
objectsCommented:
> @Object : getHiostConfig() not avaliable ??

should be getHostConfiguration()
0
 
CEHJCommented:
:)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 8
  • 8
  • 4
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now