Reputation: 24049
I would like to fetch a SSL page in Java. The problem is, that I have to authenticate against a http proxy.
So I want a simple way to fetch this page. I tried the Apache Commons httpclient, but it's too much overhead for my problem.
I tried this piece of code, but it does not contain an authentication action:
import java.io.*;
import java.net.*;
public class ProxyTest {
public static void main(String[] args) throws ClientProtocolException, IOException {
URL url = new URL("https://ssl.site");
Socket s = new Socket("proxy.address", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, s.getLocalSocketAddress());
URLConnection connection = url.openConnection(proxy);
InputStream inputStream = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String tmpLine = "";
while ((tmpLine = br.readLine()) != null) {
System.out.println(tmpLine);
}
}
}
Can anyone provide some information how to implement it on an easy way?
Thanks in advance
Upvotes: 6
Views: 6860
Reputation: 4159
with apache commons-http-client 4 : you'll find a lot of examples @ https://github.com/apache/httpcomponents-client/tree/master/httpclient5/src/test/java/org/apache/hc/client5/http/examples
Upvotes: 0
Reputation: 14223
You need to set a java.net.Authenticator before you open your connection:
...
public static void main(String[] args) throws Exception {
// Set the username and password in a manner which doesn't leave it visible.
final String username = Console.readLine("[%s]", "Proxy Username");
final char[] password = Console.readPassword("[%s"], "Proxy Password:");
// Use a anonymous class for our authenticator for brevity
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
URL url = new URL("https://ssl.site");
...
}
To remove your authenticator after you're finished, call the following code:
Authenticator.setDefault(null);
The authenticator in Java SE 6 supports HTTP Basic
, HTTP Digest
and NTLM
. For more information, see the Http Authentication documentation at sun.com
Upvotes: 6
Reputation: 26658
org.apache.commons.httpclient.HttpClient is your friend,
Sample code from http://hc.apache.org/httpclient-3.x/sslguide.html
HttpClient httpclient = new HttpClient();
httpclient.getHostConfiguration().setProxy("myproxyhost", 8080);
httpclient.getState().setProxyCredentials("my-proxy-realm", " myproxyhost",
new UsernamePasswordCredentials("my-proxy-username", "my-proxy-password"));
GetMethod httpget = new GetMethod("https://www.verisign.com/");
try {
httpclient.executeMethod(httpget);
System.out.println(httpget.getStatusLine());
} finally {
httpget.releaseConnection();
}
Upvotes: 4