Re: Some advice on dealing with a networking issue
On Thu, 21 Jan 2010, The Frog wrote:
There is a website, actually an ftp site with (surprise surprise!) files
on it. each week a new file is added. On my local network is a shared
folder that I need to keep updated with files from the FTP site. So far
so simple. Here's the issue: Due to a proxy server (simple
authentication where it requests a username and password to access the
internet) I can only access the FTP site via a web browser (eg/ Internet
Explorer, Firefox, etc...) and download the file(s) I want manually.
What is being done 'behind the scenes' so to speak is that the web
browser is using HFTP to download the file (FTP over HTTP). What I would
like to do is to write an application that can download these files for
me.
Have a read of sections 2.3 and 3 in here:
http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html
You can do 'HFTP' with a normal URLConnection. To summarise that link (all
classes not from java.lang are from java.net):
SocketAddress proxyAddr = new InetSocketAddress("proxy.frogcorp.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyAddr);
URL url = new URL("ftp://frog:noteasy@ftp.the-pond.org");
URConnection conn = url.openConnection(proxy);
You mention that your proxy server requires authentication. If it's doing
this with the HTTP authentication mechanism, then you can, i believe,
cooperate with that using Authenticator:
String username;
String password;
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// should really validate host and prompt/realm here to make sure it's the proxy
return new PasswordAuthentication(username, password.toCharArray());
}
});
I don't think there's a way to do per-connection authentication with
standard JDK classes. Apache HttpClient can do it, though, so that would
be a cleaner option if you're willing to use an extra library and write
slightly more long-winded code.
tom
--
You have now found yourself trapped in an incomprehensible maze.