Download de Arquivo através de URL

Olá,
Necessito de ajuda para realizar o download do arquivo através dessa URL (https://www.cepea.esalq.usp.br/br/indicador/series/acucar.aspx?id=53).
O maior problema é que o arquivo que necessito é gerado após o acesso à URL e só então o download é iniciado.
Outro problema: o sistema é um legado em Java 6.
De todas as formas que eu tentei o retorno é sempre connection timed out: connect openstream java

Qual o problema disso?

Qual seria o problema de fazer isso em Java 6?

E não postou nenhuma das formas?

Eu fiz utilizando o código abaixo e não obtive nenhum problema:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class Download {

    public static void main(String[] args) {
        try {

            URL link = new URL("https://www.cepea.esalq.usp.br/br/indicador/series/acucar.aspx?id=53");
            File arquivo = new File("C:\\teste.xls");

            System.out.println("Iniciando download de \"" + link + "\"");
            long tempo = System.currentTimeMillis();

            Download download = new Download(link);
            download.saveTo(arquivo);

            tempo = System.currentTimeMillis() - tempo;
            System.out.println("Download finalizado em " + tempo + " ms");
            System.out.println("Arquivo salvo em \"" + arquivo.getAbsolutePath() + "\"");

        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private final URL url;

    public Download(URL url) {
        this.url = url;
    }

    public void saveTo(File file) throws IOException {
        FileOutputStream out = new FileOutputStream(file);
        saveTo(out);
        out.close();
    }

    public void saveTo(OutputStream out) throws IOException {
        InputStream in = url.openStream();
        byte[] buffer = new byte[8192];
        for (int read = -1; (read = in.read(buffer)) != -1; out.write(buffer, 0, read)) {}
        out.flush();
    }
}

Saída após executar a classe:

Iniciando download de "https://www.cepea.esalq.usp.br/br/indicador/series/acucar.aspx?id=53"
Download finalizado em 3230 ms
Arquivo salvo em "C:\teste.xls"

Bom dia Staroski,
Obrigado pela resposta.
Sobre os apontamentos que vc fez.

  1. Para mim o fato do arquivo ser gerado me pareceu um problema pois das tentativas que realizei todas só funcionaram com links fixos (com o nome do arquivo na url).
  2. O fato do sistema estar em Java 6 é que muitas das opções que me apareceram foram utilizando NIO, do Java 7
  3. Nâo coloquei nenhuma das tentativas, simplesmente por que não funcionaram…rs

Quando o rodei seu código no meu ambiente recebi o mesmo retorno.

Iniciando download de "https://www.cepea.esalq.usp.br/br/indicador/series/acucar.aspx?id=53"
java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:529)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:570)
	at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:411)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:525)
	at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:272)
	at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
	at java.net.URL.openStream(URL.java:1010)
	at Download.saveTo(Download.java:44)
	at Download.saveTo(Download.java:39)
	at Download.main(Download.java:20)

Tem idéia do que pode ser?

As configurações de proxy, firewall estão OK?

Usando seu navegador, você consegue baixar o arquivo clicando no link abaixo?
https://www.cepea.esalq.usp.br/br/indicador/series/acucar.aspx?id=53

Se for o proxy, você terá que setar ele no Java antes de fazer o download:

System.setProperty("http.proxyHost", "<aqui vai o host>");
System.setProperty("http.proxyPort", "<aqui vai a porta>");

Download download = new Download(link);
download.saveTo(arquivo);

Eu verifiquei aqui e o navegador já tem setado um Script de Configuração Automático.
Consigo incluir essa informação no código?

Podes tentar usar o

System.setProperty("java.net.useSystemProxies", "true");

Se não funcionar terás que te informar com o pessoal responsável por esse script e setar manual mente o host e porta como na minha mensagem anterior.