Caros,
Eu tinha uma aplicação que baixava do site da Caixa Econômica os resultados da Megasena em um arquivo zipado.
De um tempo pra cá, vi que não consigo mais fazê-lo via java, só via browser. Que tipo de limitação eles podem ter adicionado? E como conseguir fazer o download?
Tentei passar REFERER, cookies etc, sem sucesso.
Abaixo posto o código já alterado, que ainda não funciona. Se vocês puderem me dar uma luz, agradeceria.
Não uso proxy, essa era uma implementação que eu iria adicionar no futuro. Enchi de logs também para tentar melhor o entendimento do que está acontecendo; em vão.
public class URLDownload {
final static int size = 1024;
private static final Logger logger = Logger.getLogger(URLDownload.class
.getName());
public static final void main(String... x) {
URLDownload.fileUrl("http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip", "teste.zip", ".");
}
/**
*
* @param fAddress
* @param localFileName
* @param destinationDir
*/
public static void fileUrl(String fAddress, String localFileName,
String destinationDir) {
OutputStream outStream = null;
URLConnection uCon = null;
InputStream is = null;
try {
URL url;
byte[] buf;
int ByteRead, ByteWritten = 0;
url = new URL(fAddress);
outStream = new BufferedOutputStream(new FileOutputStream(
destinationDir + "/" + localFileName));
try {
String host = ProxyProp.getInstance().get("host");
String port = ProxyProp.getInstance().get("port");
String user = ProxyProp.getInstance().get("user");
String pass = ProxyProp.getInstance().get("pass");
// faz a conexão via proxy
if (host != null && !host.equals("") && JMega.proxyChecked) {
Authenticator.setDefault(new BasicAuthenticator(user, pass));
SocketAddress sa = new InetSocketAddress(host, new Integer(port));
Proxy proxy = new Proxy(Type.HTTP, sa);
uCon = url.openConnection(proxy);
logger.info("Conexão aberta com sucesso");
} else { // sem proxy
uCon = url.openConnection();
logger.info("Conexão aberta com sucesso");
}
} catch (Exception e) {
uCon = url.openConnection(); // sem proxy
logger.info("Conexão aberta com sucesso");
}
// setando propriedades de request
logger.info("Setando HTTP Request");
uCon.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30");
uCon.setRequestProperty("Referer", "http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_resultado.asp");
// trabalhando os cookies
logger.info("Abrindo conexão para coleta de cookies");
URL ref = new URL("http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_resultado.asp");
URLConnection coo = ref.openConnection();
coo.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30");
coo.setRequestProperty("Referer", "http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_resultado.asp");
logger.info("Conexão aberta");
CookieManager cm = new CookieManager();
cm.storeCookies(coo);
logger.info("Cookie: " + cm.toString());
cm.setCookies(uCon);
logger.info("Cookies setados");
logger.info("Lendo bytes");
is = uCon.getInputStream();
buf = new byte[size];
while ((ByteRead = is.read(buf)) != -1) {
outStream.write(buf, 0, ByteRead);
ByteWritten += ByteRead;
}
logger.info("Download realizado com sucesso");
logger.info("Nome do arquivo: \"" + localFileName + "\" - Bytes: "
+ ByteWritten);
} catch (Exception e) {
logger.severe("Erro ao realizar o download");
throw new RuntimeException(e);
} finally {
try {
is.close();
outStream.close();
} catch (Exception e) {
logger.severe("Erro ao fechar conexão");
throw new RuntimeException(e);
}
}
}
}