Bom galera o titulo ja diz tudo
testei algumas formas mas nenhuma funcional com ftp passivo e proxy https autenticado
alguma dica
Bom galera o titulo ja diz tudo
testei algumas formas mas nenhuma funcional com ftp passivo e proxy https autenticado
alguma dica
esse foi o mais proximo que consegui chegar
System.getProperties().put( "ftProxySet", "true" );
System.getProperties().put( "ftpProxyHost", "ipdoproxy" );
System.getProperties().put( "ftpProxyPort", "21" );
System.getProperties().put("http.proxyUser", "logindoproxy");
System.getProperties().put("http.proxyPassword", "senhadoproxy");
String nomeArquivo = null;
FTPClient ftp = new FTPClient();
try {
ftp.connect( "ipdoservidor" );
//verifica se conectou com sucesso!
if( FTPReply.isPositiveCompletion( ftp.getReplyCode() ) ) {
ftp.login( "logindoservidor", "senhadoservidor" );
} else {
//erro ao se conectar
ftp.disconnect();
System.out.println("Conexão recusada");
System.exit(1);
}
String[] arq = ftp.listNames();
System.out.println ("Listando arquivos: \n");
for (String f : arq){
System.out.println("asdasd");
System.out.println(f);
}
ftp.disconnect();
System.out.println("Fim. Tchau!");
} catch( Exception e ) {
System.out.println("Ocorreu um erro: "+e);
System.exit(1);
}
esse codigo esta me retornando um java.lang.NullPointerException
Adicione e.printStrackTrace(); no seu catch. O erro mostrará a linha em que o NullPointer ocorre.
muito obrigado Erickrar
descobri que ftp.listNames(); esta retornando nulo
pelo que entendi o meu servidor nao aceita conexoes no modo passivo e por isso eu devo um socket servidor na minha aplicação
acho que é por ai
achei alguns topicos aqui no guj mas o pessoal resolveu fazendo a conexao no modo passivo, como nao disponho desse recurso vou dar mais uma pesquisada
de qualquer forma devo implementar algumas coisas a mais na minha aplicacao, alguma dica?
Complementando corrigindo e avancando
meu servidor ftp aceita conexoes em modo passivo mas a principio o proxy autenticado esta impedindo a listagem de diretorio
meu codigo atual é esse
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
public class FtpPassivoListar {
public static void main (String[] args) throws SocketException,
IOException {
System.getProperties().put( "ftpProxySet", "true" );
System.getProperties().put( "ftpProxyHost", "ipdo meu proxy" );
System.getProperties().put( "ftpProxyPort", "21" );
System.getProperties().put("http.proxyUser", "login do proxy");
System.getProperties().put("http.proxyPassword", "senha do proxy");
FTPClient ftp = new FTPClient();
ftp.connect( "endereco do servidorftp" );
ftp.login( "login do ftp", "senha do ftp" );
ftp.changeWorkingDirectory ("meuDir");
String[] arq = ftp.listNames();
System.out.println ("Listando arquivos: \n");
for (String f : arq){
System.out.println(f);
}
}
}
Criei 3 classes aqui
1 envia 1 recebe e 1 lista
O envio de arquivos esta funcionando perfeitamente, o recebimento ate cria um arquivo local mas ele é vazio e acaba dando timeout, e a listagem tambem da timeout
Enviar
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
public class FtpPassivoEnviar {
public static void main (String[] args) throws SocketException,
IOException {
System.getProperties().put( "ftpProxySet", "true" );
System.getProperties().put( "ftpProxyHost", "ipproxy" );
System.getProperties().put( "ftpProxyPort", "21" );
System.getProperties().put("http.proxyUser", "loginproxy");
System.getProperties().put("http.proxyPassword", "senhaproxy");
FTPClient ftp = new FTPClient();
ftp.connect( "ipftp" );
ftp.login( "usuarioftp", "senhaftp" );
FileInputStream arqEnviar =
new FileInputStream("/home/user/Downloads/mensagens666.txt");
if (ftp.storeFile ("/public_html/mensagens666.txt", arqEnviar))
System.out.println("Arquivo armazenado com sucesso!");
else
System.out.println ("Erro ao armazenar o arquivo.");
ftp.logout();
ftp.disconnect();
}
}
Receber
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class FtpPassivoReceber {
public static void main (String[] args) throws SocketException,
IOException {
System.getProperties().put( "ftpProxySet", "true" );
System.getProperties().put( "ftpProxyHost", "ipproxy" );
System.getProperties().put( "ftpProxyPort", "21" );
System.getProperties().put("http.proxyUser", "loginproxy");
System.getProperties().put("http.proxyPassword", "senhaproxy");
FTPClient ftp = new FTPClient();
ftp.connect( "ipftp" );
ftp.login( "usuarioftp", "senhaftp" );
if(FTPReply.isPositiveCompletion( ftp.getReplyCode() )){
System.out.println("....: Conectou");
ftp.enterLocalPassiveMode();
}
ftp.changeWorkingDirectory ("/public_html");
System.out.print("....: "+ftp.getReplyString());
System.out.println("....: Porta "+ftp.getDefaultPort());
//String[] arq = ftp.listNames();
FileOutputStream fos =
new FileOutputStream( "/home/usuario/Downloads/mensagens.txt" );
if (ftp.retrieveFile( "mensagens.txt", fos ))
System.out.println("Download efetuado com sucesso!");
else
System.out.println ("Erro ao efetuar download do arquivo.");
ftp.logout();
ftp.disconnect();
}
}
Listar
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FtpPassivoListar {
public static void main (String[] args) throws SocketException,
IOException {
System.getProperties().put( "ftpProxySet", "true" );
System.getProperties().put( "ftpProxyHost", "ipproxy" );
System.getProperties().put( "ftpProxyPort", "21" );
System.getProperties().put("http.proxyUser", "login");
System.getProperties().put("http.proxyPassword", "senha");
FTPClient ftp = new FTPClient();
ftp.connect( "ipftp" );
ftp.login( "loginftp", "senhaftp" );
System.out.print("....: "+ftp.getReplyString());
if(FTPReply.isPositiveCompletion( ftp.getReplyCode() )){
System.out.println("....: Conectou");
ftp.enterLocalPassiveMode();
}
ftp.changeWorkingDirectory ("/public_html");
System.out.print("....: "+ftp.getReplyString());
System.out.println("....: Porta "+ftp.getDefaultPort());
FTPFile[] files = ftp.listFiles();
System.out.println("....: Testando com FTPFile");
System.out.println("....: Quantidade["+files.length+"]");
String[] arq = ftp.listNames();
System.out.println("....: Testando com ftp.listNames()");
System.out.println("....: Quantidade["+arq.length+"]");
System.out.println ("Listando arquivos: \n");
for (String f : arq){
System.out.println(f);
}
ftp.logout();
ftp.disconnect();
}
}
como dentro da rede programas como o filezzila e outros de ftp funcionam fico na duvida se falta algo pra funcionar.
Agradeco alguma dica
So pra constar
Fiz alguns testes agora e se eu tirar as configuracoes de proxy nao muda em nada o comportamento
inclusive envia os arquivos atraves do proxy
Amigo,
Sou iniciante em Java, ttenho pouco mais de um mês estudando e estou adorando!! Não sei se te ajudará, mais consegui realizar todas as operações através do FTP, da uma olhada no meu código.
PS.: Como fui testando as funcionalidades uma a uma, sugiro quando foir testar comentar as áreas que não for utilizar, tipo, se for listar comenta os codigos de upload e download, se for testar download, comenta lista e upload e etc… Espero poder ajudar, a comunidade tem me ajudade muito!!
PS.2.: Comentei também as áreas relacionadas ao proxy.
package estudoJava;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import javax.swing.JOptionPane;
import org.apache.commons.net.ftp.FTPClient;
public class clienteFtp {
public static void main (String[] args) throws SocketException,
IOException {
//System.getProperties().put( "ftpProxySet", "true" );
//System.getProperties().put( "ftpProxyHost", "ipproxy" );
//System.getProperties().put( "ftpProxyPort", "" );
// System.getProperties().put("http.proxyUser", "loginproxy");
// System.getProperties().put("http.proxyPassword", "senhaproxy");
FTPClient ftp = new FTPClient();
ftp.connect( "10.9.68.5" );
ftp.login( "transf", "transf" );
ftp.changeWorkingDirectory ("/transf/recebe/outros");
//FTPFile[] files = ftp.listFiles();
String[] arq = ftp.listNames();
String lista = "";
for (String f : arq){
lista += f+"\n";
System.out.println("Lista do diretório: "+f);
}
JOptionPane.showMessageDialog(null, "Lista do Contéudo da Pasta: \n"+lista);
FileInputStream arqEnviar = new FileInputStream("C:/Users/jlazaro/gerarLaudosPDF.pdf");
if (ftp.storeFile ("/transf/recebe/outros/gerarLaudosPDF.pdf", arqEnviar))
System.out.println("Arquivo armazenado com sucesso!");
else
System.out.println ("Erro ao armazenar o arquivo.");
FileOutputStream fos=new FileOutputStream( "C:/EFD_Setup.zip" );
if (ftp.retrieveFile( "EFD_Setup.zip", fos ))
System.out.println("Download efetuado com sucesso!");
else System.out.println ("Erro ao efetuar download do arquivo.");
ftp.logout();
ftp.disconnect();
}
}
obrigado pela resposta, meu problema acontece ao utilizar esse metodo atras de um proxy http autenticado, ate agora tudo q eu achei aponta para esse tipo de erro em uma conexao ftp ativa mas estou usando uma conexao passiva e ainda ssim operacoes como listar o servidor ftp e receber um arquivo nao funcionam, apenas o envio ao servidor funciona