163

If I do this...

conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());

it prints

Proxy? false

The problem is, I am behind a proxy. Where does the JVM get its proxy information from on Windows? How do I set this up? All my other apps seem perfectly happy with my proxy.

7 Answers 7

383

Since java 1.5 you can also pass a java.net.Proxy instance to the openConnection(proxy) method:

//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);

If your proxy requires authentication it will give you response 407.

In this case you'll need the following code:

    Authenticator authenticator = new Authenticator() {

        public PasswordAuthentication getPasswordAuthentication() {
            return (new PasswordAuthentication("user",
                    "password".toCharArray()));
        }
    };
    Authenticator.setDefault(authenticator);
Sign up to request clarification or add additional context in comments.

13 Comments

can we provide proxy username and proxy password through it.
What if you have different username/password pairs for the different proxies? Calling a static method to set the default Authenticator isn't ideal, this is not much better than setting the sys properties method..
Authenticator.default is a static (i.e. global) variable, so it's only once. But please note that the Authenticator above is just a minimal example. It can only handle one password at a time. Google for examples that can handle multiple hosts with different passwords.
Since 8u11 this will not work by default with Basic authentication, oracle.com/technetwork/java/javase/8u111-relnotes-3124969.html jdk.http.auth.tunneling.disabledSchemes system property must be set to emtpty
In case you have domain. Do as following: new PasswordAuthentication("domainName\\user", "password".toCharArray());
|
39

This is fairly easy to answer from the internet. Set system properties http.proxyHost and http.proxyPort. You can do this with System.setProperty(), or from the command line with the -D syntax. EDIT: per comment, set https.proxyPort and https.proxyHost for HTTPS.

2 Comments

Please edit your answer to include for the scenario when it's https. If you connect to a https endpoint you have to use https.proxyHost and https.proxyPort.
Although your answer seems to be correct, it lacks details. Please add some code examples as to how to use these properties.
23

Proxies are supported through two system properties: http.proxyHost and http.proxyPort. They must be set to the proxy server and port respectively. The following basic example illustrates it:

String url = "http://www.google.com/",
       proxy = "proxy.mydomain.com",
       port = "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);

5 Comments

@Pascal Do you happen to know what are the major differences of using latest Java approach in comparison to Apache commons-httpclient? As Java supports proxying and authentication (as you mentioned here stackoverflow.com/questions/1626549/…), for simple cases (like retrieve one file from public HTTP server) there is no reason to use Apache library. What is your recommendation?
@dma_k I agree with you, for simple use cases like the one you described I wouldn't use a third party library.
Do you know how to support the nonProxyHosts? I see that my device support it but doesn't know how to make my app handle it.
But variable systemProperties is not used by the connection!
How to pass read cookie ???
21

You can also set

-Djava.net.useSystemProxies=true

On Windows and Linux this will use the system settings so you don't need to repeat yourself (DRY)

http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies

3 Comments

This works only with manual proxy server configuration. Automatic proxy configuration and proxies configured through script are not (yet) propagated to "useSystemProxies".
This worked for me when setting the proxyHost and proxyPort didn't. Thanks!
Likewise, this worked from behind my company proxy when calls to System.setProperty for the https.proxyHost and https.proxyPort for some reason weren't cutting the mustard.
10

Set following before you openConnection,

System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");

If proxy requires authentication,

System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");

1 Comment

I actually think "http.proxyUser" and "http.proxyPassword" are not supported anymore. See stackoverflow.com/questions/120797/… for more details.
6

For Java 1.8 and higher you must set -Djdk.http.auth.tunneling.disabledSchemes= to make proxies with Basic Authorization working with https.

1 Comment

Background information about this is discussed at stackoverflow.com/questions/41806422/…
4

The approved answer will work ... if you know your proxy host and port =) . But in case you are looking for the proxy host and port the steps below should help

if auto configured proxy is given: then

1> open IE(or any browser)

2> get the url address from your browser through IE->Tools->internet option->connections->LAN Settings-> get address and give in url eg: as http://autocache.abc.com/ and enter, a file will be downloaded with .pac format, save to desktop

3> open .pac file in textpad, identify PROXY:

In your editor, it will come something like:

return "PROXY web-proxy.ind.abc.com:8080; PROXY proxy.sgp.abc.com:8080";

kudos to bekur from maven in 5 min not working

Once you have the host and port just pop in into this and your good to go

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
        URLConnection connection = new URL(url).openConnection(proxy);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.