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.
- 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).
- O fato do sistema estar em Java 6 é que muitas das opções que me apareceram foram utilizando NIO, do Java 7
- 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.