quinta-feira, 3 de novembro de 2022

Pegando um arquivo de uma URL com Java usando Proxy

      As vezes nem tudo é tão simples. No artigo anterior eu mostrei como pegar um arquivo com Java a partir de uma URL, porém na maioria das empresas para se ter acesso a internet é preciso usar um proxy devido a configurações de segurança e tal. Então para acessar arquivos de URLs sem usar proxy provavelmente só vai rolar se for de URLs internas da empresa. Mas calma, usar o proxy muda pouca coisa no nosso código e vou seguir com os mesmos exemplos. Como no artigo anterior isso pode ser aplicado a um PDF, uma imagem, etc. Vou mostrar uma forma apenas com Java puro e outra que usa o org.apache.commons.io.IOUtils para copiar do InputStream para o OutputStream.

      No problema em questão a necessidade original era buscar um arquivo e retorná-lo em memória para um método que irá guardá-lo no banco de dados.

       Segue o exemplo de código apenas com o Java puro:

try {
    URL url = new URL("http://www.pdf995.com/samples/pdf.pdf");
    
    //cria o proxy com ip e porta do proxy
    URLConnection openConnection = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("ip_do_proxy", 8080)));
    
    // muda a chamado do stream
    InputStream in = new BufferedInputStream(openConnection.getInputStream());
    ByteArrayOutputStream out = new ByteArrayOutputStream();
   
    byte[] buf = new byte[121072]; //quantidade de bytes lida por vez
    int i = 0;
   
    while (-1 != (i = in.read(buf))){
         out.write(buf, 0, i);
    }
   
    out.close();
    in.close();
   
    byte[] dadosRecebidos = out.toByteArray();
           
    File pdf = File.createTempFile("nomedoc"".pdf"); //cria arquivo temporário
    FileOutputStream fos = new FileOutputStream(pdf); // passa o arquivo para o fos
    fos.write(dadosRecebidos); //escreve os dados no arquivo criado
    fos.close();
                 
    return pdf;
                 
           
catch (Exception e) {
    e.printStackTrace();
}

       Segue o exemplo usando o apache commons:

try {
    URL url = new URL("http://www.pdf995.com/samples/pdf.pdf");

    //cria o proxy com ip e porta do proxy
   URLConnection openConnection = url.openConnection(new Proxy(Proxy.Type.HTTPnew InetSocketAddress("ip_do_proxy", 8080)));

    InputStream in = new BufferedInputStream(
openConnection.getInputStream());
   
    File pdf = File.createTempFile("nomedoc"".pdf"); //cria arquivo temporário
    FileOutputStream fos = new FileOutputStream(pdf); // passa o arquivo para o fos
       
    IOUtils.copy(in, fos); // usando org.apache.commons.io.IOUtils para passar os dados para o arquivo
   
    in.close();
    fos.close();
    return pdf;
 
catch (Exception e) {
    e.printStackTrace();
}

       Para este artigo é isso. Se quiser saber como fazer sem o proxy está aqui o artigo:

Pegando um arquivo de uma URL com Java

Nenhum comentário:

Postar um comentário