Mais uma vez, foi típico. Um amigo estava a ver na Wiki do JTL e viu um script para descarregar um ficheiro do servidor Web via FTP para o computador local. Só que o script não parece fazer o que o utilizador espera. Logo a seguir, o post na comunidade de utilizadores do JTL com a dica amigável de que posso certamente resolver o problema. Onde é que as pessoas vão buscar essa ideia? Muito bem, aqui vai a solução.
Existem várias soluções para a transferência automática via FTP. Por um lado, podemos escrever um script com o WinSCP, o que não é uma má ideia. A segunda abordagem baseia-se no JTL-Wawi Wiki, um ficheiro batch que executa um script FTP. Desde que só façamos a transferência num cliente Windows, o ficheiro batch é suficiente. A situação é um pouco diferente se quisermos executar a transferência directamente num servidor Windows 2012 R2 ou Windows 2016. Ocorre aqui um erro apesar de uma firewall aberta. É por isso que utilizamos a ferramenta WinSCP, que depois iniciamos através do agendamento de tarefas.
Em primeiro lugar, precisamos de um directório no nosso servidor ou PC Windows, onde colocamos os ficheiros batch necessários e que servirá de alvo para a nossa transferência. Para o fazer, criamos uma pasta algures, de preferência na raiz de uma partição, por exemplo, C:Download. Nesta pasta, criamos dois ficheiros com o editor. Um com o nome significativo download.bat e o outro chamamos ftpdownload.ftp. Em qualquer caso, devemos certificar-nos antecipadamente de que as extensões dos nomes dos ficheiros são apresentadas! O conjunto fica então parecido com as três imagens de ecrã seguintes.
Depois de criarmos os ficheiros, podemos começar a “scripting”. Primeiro, criamos o script para o download por FTP e abrimos o ficheiro ftpdownload.ftp no editor.
Para criar o nosso script de transferência, precisamos agora das seguintes informações:
- O domínio em que os dados estão localizados, por exemplo, mydomain.com
- O nome do utilizador FTP, por exemplo, webmaster
- A palavra-passe secreta do utilizador FTP, por exemplo, P@ssw0rd
- O caminho para o ficheiro no espaço Web, por exemplo, httpdocs/download
- O nome do ficheiro que queremos descarregar, por exemplo, test.txt
A partir desta informação, criamos o seguinte guião:
open meinedomain.de
webmaster
P@ssw0rd
bin
lcd C:download
cd /httpdocs/download
get test.txt
bye
No guião, basta agora substituir os meus dados de amostra pelos seus.
Agora editamos o download.bat, com o qual chamamos o ftpdownload.ftp e iniciamos o download propriamente dito. Aqui entramos no seguinte e belo 4-liner:
@echo off
echo --- starte FTP-Transfer….
ftp -s:ftpdownload.ftp
echo ---fertig.
Para efeitos de teste, é aconselhável acrescentar o comando Pause no final, como se pode ver na captura de ecrã. Se mais tarde pretender executar o ficheiro automaticamente através do agendador de tarefas do Windows, deve remover novamente esta linha.
Delta Whiskey, era isso. Agora podemos iniciar o nosso download.bat pela primeira vez com um corajoso duplo clique.
Quando testo o script num servidor Windows, recebo a mensagem de erro “425 Unable to build data connection: Connection timed out” após dois minutos. Mas que raio é isto? Mesmo abrindo as portas na firewall, o meu servidor de testes não conseguiu descarregar o ficheiro de teste do meu servidor Web através de FTP. Acontece merda!
Restam apenas duas alternativas. Um script PowerShell ou a utilização do WinSCP. Escolhi a segunda opção, uma vez que os utilizadores não profissionais também devem ser capazes de lidar com esta ferramenta. Pode descarregar o WinSCP aqui: https://winscp.net/eng/download.php#download2
A instalação do WinSCP é auto-explicativa e penso que não preciso de a explicar mais. Depois do início, temos de nos ligar ao nosso servidor FTP.
De seguida, clicamos no item de menu Session e, em seguida, em Create Session URL/Code….
No separador URL, activamos as opções Nome de utilizador, Palavra-passe e, em seguida, passamos para o separador Script.
Aqui, clicamos no botão “Copiar para a área de transferência” e, em seguida, abrimos o Editor do Windows.
Colamos o texto da área de transferência no novo ficheiro de texto e eliminamos as linhas “# O seu comando 1” e “# O seu comando 2”. Para isso, a linha get /[Pfad zur Datei]/[Dateiname] [lokales Zielverzeichnis][lokaler Dateiname] sobre. O conjunto deve então ter o seguinte aspecto get /httpdocs/test.txt C:Downloadtest.txt
Guardamos o ficheiro como ftpdownload.txt no directório Download e chamamo-lo através da linha de comandos. Para o fazer, mudamos para o directório de instalação do WinSCP C:Program Files (x86)WinSCP e introduzimos este comando winscp /script=”C:Downloadftpdownload.txt”.
Tudo isto pode agora ser incorporado numa simples tarefa na Gestão Informática do Agendamento de Tarefas e depois o ficheiro é descarregado do servidor uma vez por dia. Só tenho de me certificar de que selecciono WinSCP.exe em Programa/Script e introduzo /script=”C:Downloadftpdownload.txt” em Adicionar argumentos. A transferência automática por FTP está pronta.