Imagen

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.


CARTA PORTE V3.1

ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03


.

DADO Necesita ayuda para probar rutina de FTP

Para los que programamos en Delphi, aqui estan las respuestas
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

DADO Necesita ayuda para probar rutina de FTP

Mensaje por Dado »

Acerca del ValidaCFD y la descarga por FTP de la lista de Folios y Certificados.

Ya algunos meses atras me habian reportado que simplemente esta funcion "congelaba" la compu, recientemente tambien me han reportado lo mismo.

Como mi compromiso es hacer que el ValidaCFD funcione a como de lugar fue cuando le agregue la rutina de "Cargar la lista a partir de un archivo" y mas o menos se soluciono el problema pero siguen los reportes de algunos usuarios que se les congela la PC

Bueno la cosa es que A MI ME FUNCIONA MUY BIEN la descarga y me es *casi* IMPOSIBLE solucionar un problema QUE NO TENGO EN MI COMPU.

Es aqui donde quiero pedirle A TODA LA COMUNIDAD DELPHI que me eche la mano a probar esta rutina que anexo, en especial a los colegas que estan detras de un proxy un firewall.

Es una rutina escrita en Delphi Version 7 Y LO MAS IMPORTANTE tengo cargado Indy Version 10

La rutina simplemente descarga un archivo llamado prebases_018_2006.doc del sitio DEL SAT, descargo ese archivo porque es muuuuchisimo mas chico que los 22Mb del archivo de folios y/o certificados

Si les funciona a la primera, mmmh entonces no son candidatos para seguir con las pruebas, quier encontrar a usuarios QUE NO LES FUNCIONE a la primera y que tengan que hacer modificaciones para que jale, y entonces me reportan aqui dichas modificaciones y las aplico.

No quiero aburrirlos con el sermon de "Ayuda a Mexico" "yo ya ofrezco el ValidaCFD sin costo y se lleva 10,000+ lineas de codigo" "hazlo por la comunidad"...... ;)

Gracias por su contribucion a este proyecto. :D
Adjuntos
PruebaFTP.rar
(2.84 KiB) Descargado 479 veces
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
condor0086
Mensajes: 425
Registrado: Jue Ago 05, 2010 3:11 pm

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por condor0086 »

Resultado de las pruebas:

Compilado sin problemas con Delphi 2007 con Windows 7

Código: Seleccionar todo

- No se encontraba el archivo en el FTP, después de buscar encontré que lo correcto en Folios.pas l.82 es:
  '/agti_servicio_ftp/publicaciones/adquisiciones/licitaciones'
  en vez de:
  '/agti_servicio_ftp/licitaciones'
* Corregido

- Al ejecutar marca "No se pudo descargar el archivo: Destination file already exist"
  Revisando con el Debug el problema lo daba en Folios.pas l.55:  Get(FName,tempfname,false,false);
  Pensando alguna restricción con Win7 modifiqué la l.34 de 	
    tempfname := LocalPath + 'temp.ftp';    (que daba "c:temp.ftp")
  lo cambié a:
    tempfname := 'c:\Temp.ftp';
  mismo error, entonces lo cambié a:
    tempfname := 'Temp.ftp';
  mismo error, decidi cambiar la l.55 quedando
    Get(FName,tempfname,True,false);  //El true es "Overwrite"
* Desapareció este error
  
- Al ejecutar el programa se queda colgado en Folios.pas l.55:  Get(FName,tempfname,True,false);
  Empiezo a hacer pruebas cambiando el valor a ProxyType en Unit1.pas l.39
  Resultados:
    fpcmNone  -> Se cuelga en Get(FName,
    fpcmUserSite -> Error en el Connect -> Error en la conección: user anonymous@ftp2.sat.gob.mx cannot log in
    fpcmSite -> Se cuelga en Get(FName, 
    fpcmOpen -> Error en el Connect -> Socket error #10053 Software caused connection error
    fpcmUserPass -> Error en el Connect -> Error en la conección: user anonymous@@ftp2.sat.gob.mx cannot log in (SIC)
    fpcmTransparent, -> Se cuelga en Get(FName,
    fpcmHttpProxyWithFtp ->Error en el Connect -> Error en la conección: Command not supported.
Listo para cualquier otra prueba que solicites
Saludos :)
condor0086
Mensajes: 425
Registrado: Jue Ago 05, 2010 3:11 pm

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por condor0086 »

LO ENCONTRE!!!!!!!! :D :D :D

Solo tienes que insertar:
FTP.Passive := True;

digamos en Folios.pas l.42

Con esto ya todo funciona perfecto! :)

Volví a empezar:
- tomé los archivos tal cual los pusiste
- Le agregué FTP.Passive := True;
- Modifiqué la ruta del FTP a '/agti_servicio_ftp/publicaciones/adquisiciones/licitaciones'
- Cambié el True en Get(FName,tempfname,True,false); (Esto es muy importante, probé sin este cambio y no puede crear el archivo)
- Volví a descargar el archivo, todo bien!

Finalmente hice una comparación binaria del mismo archivo bajado directamente a través de un programa FTP, 100% idéntico.

Saludos! :D
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por Dado »

Gracias condor0086 en un momento mas te envio una version de prueba.

Te comento que tuve que tomar la decision de poner en el menu de opciones UNA CASILLA DE CONFIRMACION para activar o no el Passive.

Esto tuve que hacerlo porque lei en la documentacion lo siguiente :

If Passive is set to True, the PASV method is used. In this method, TIdFTP issues the PASV command and the server tells TIdFTP where to establish the data connection. TIdFTP than connects to the server where the server indicated using TIdTCPClient. This method is sometimes used with some proxy configurations. However, some proxy configurations require PORT transfers and some FTP servers do not support PASV transfers.

En resumen, aveces si lo requiere pero aveces no....... y corro el riesgo que a los que ya les habia funcionado ahora les falle.

Se me ocurrio por supuesto hacer una especie de :

Código: Seleccionar todo

Passive := false;

if not FTP.Connect then 
   Passive:= true;
   FTP.Connect;

if Connected.....
PERO! por lo que me comentas SI CONECTA, pero en donde se congela es en el GET y no tengo forma de hacer un

If Si_Se_Congela_GET then IntentaConectarEnModoPasivo......je je je hasta me da risa la funcion "Si_Se_Congela_GET" ojala tuvieramos algo asi

No esta todo perdido, solo dirigirlos al menu de opciones y que le den clic a "Modo Pasivo"

Te envio esa prueba mas tarde, me avisas si ya jala......

Ah! y lo del "True Overwrite" ya se lo puse !
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
condor0086
Mensajes: 425
Registrado: Jue Ago 05, 2010 3:11 pm

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por condor0086 »

Parece que el Passive está relacionado directamente al sitio FTP y no al equipo, por lo que veo el FTP del SAT es Passive así que en teoría no debería afectar a los demás usuarios que ya les ha funcionado. ¿te funciona a ti con Passive = True?
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por Dado »

condor0086 escribió:Parece que el Passive está relacionado directamente al sitio FTP y no al equipo, por lo que veo el FTP del SAT es Passive así que en teoría no debería afectar a los demás usuarios que ya les ha funcionado. ¿te funciona a ti con Passive = True?
Si me funciono con Passive=True

Parece que involucra a los dos, cliente y servidor :

However, some proxy configurations (esto es parte del cliente) require PORT transfers and some FTP servers (Servidor....del SAT) do not support PASV transfers

Deja hago pruebas en un ciber cafe de un cuate aqui cerca y ya veo que conviene mas, la otra seria que en instalaciones nuevas venga por default activado a Pasivo....en fin, deja lo checo
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Avatar de Usuario
ironman
Mensajes: 69
Registrado: Jue Nov 25, 2010 11:33 am

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por ironman »

Despues de instalar mi Delphi (y vaya que solte una lagrimita al hacerlo despues de AÑOS de no usarlo), y buscar e "instalar" (a la hard-core, es decir, compilando) el Indy version 10, y que el codigo fuente de ejemplo compilara, me puse a hacer pruebas.

Me tope con lo siguiente:

Hay una linea donde al ProgressBar se le asigna el valor maximo:

Código: Seleccionar todo

sProgressBar1.Max = Size(FName);
Despues de un poco de investigacion, no siempre es soportada esta funcion (SIZE). En mi caso probe con FileZilla ejecutando el comando manualmente y me devolvia un error 550 Access Denied.

Editando el codigo donde asignaba a una variable temporal el valor de Size(FName) o de lo contrario le ponia un 100 (pensando en 100%), logré que funcionara.

Código: Seleccionar todo

iFileSize := Size(FName);
if (iFileSize <= 0) then iFileSize := 100;
sProgressBar1.Max := iFileSize;
YO, en mi caso haria lo siguiente:

1. Para el avance del progressbar, lo manejaria por porcentajes (regla de 3) sobre el valor de SIZE(FName), cuando este sea mayor a 0. En caso contrario, seria de cero (inicio) o cien (al terminar).
2. Dejaria en los "settings" (el archivo INI puede ser un buen lugar, para ser accesible tanto a la version interactiva como a la version command-line) lo siguiente:
a) Direccion Servidor FTP del SAT
b) Usuario del FTP (default ANONYMOUS)
c) Password del FTP (default any@dot.com)
d) Directorio donde se ubica el archivo de Folios
e) Directorio donde se ubica el archivo de Certificados
f) Nombre de archivo de Folios (default FoliosCFD.txt)
g) Nombre de archivo de Certificados (default CSD.txt)
h) FTP Passive Mode (ON/OFF)

-----
De lo del servidor proxy, a lo que pude leer y entender en la documentacion en Indy 10, lo que está implementado es para conectarse a traves de servidores proxy de FTP. En mi caso, el servidor proxy es para HTTP (la famosa "salida a internet"). Segun la documentacion, el modo fpcmHttpProxyWithFtp esta como Not implemented at this time

Voy a seguir investigando la parte del proxy. Por lo pronto, creo que con los "fixes" sugeridos creo que la mayoria podriamos subsistir.
Avatar de Usuario
ironman
Mensajes: 69
Registrado: Jue Nov 25, 2010 11:33 am

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por ironman »

Como dato cultural, me puse a investigar otro poco lo de los servidores proxy. Existe un tipo de proxy de FTP, que a lo que pude entender es un tipo de "relay" hacia otros servidores FTP. Esto en castellano significa que haces una llamada a un servidor FTP (tu FTP proxy) para de ahi "brincar" al verdadero servidor FTP (el FTP del SAT por ejemplo). La forma de hacer el "brinco" hace la diferencia, dependiendo del comando FTP que se utilice (SITE, USER u OPEN).

La libreria Indy 10 soporta este tipo de servidores proxy y el ProxySettings es la forma de efectuar el "brinco" al servidor FTP "remoto".

En mi caso particular, el proxy que usamos (Microsoft ISA Server) es tipo HTTP y hasta donde entiendo no tiene la funcionalidad de interpretar comandos FTP. Claro que para eso esta el otro Proxy Setting fpcmHttpProxyWithFtp, lo malo es que aun no esta implementado.
Avatar de Usuario
ironman
Mensajes: 69
Registrado: Jue Nov 25, 2010 11:33 am

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por ironman »

Otro dato cultural, acerca de "Active/Passive Mode":

El FTP emplea 2 puertos. Tradicionalmente el 21 es el de comandos y el 20 es el de datos.

En modo activo, el cliente se conecta a traves de un puerto X al servidor por el puerto 21, y le indica que se dispone a "escuchar" en el puerto X+1. El servidor entonces se conecta desde su puerto de datos (20) hacia este puerto (X+1). El problema esta en que en modo activo, el cliente realmente no se esta conectando al servidor (datos), sino es el servidor quien realiza la conexion hacia el cliente. Para el firewall/proxy, esto se interpreta como que un sistema ajeno a la red esta intentando iniciar una conexion hacia un sistema interno. Este tipo de actividad normalmente esta bloqueado o es bloqueado por el firewall/proxy.... (y por eso no responde!)

En el modo pasivo, el cliente se conecta a traves del puerto X al servidor por el puerto 21, luego le indica que entrará en modo pasivo (comando PASV), por lo que el server abre un puerto de datos Z y le indica al cliente que puerto es. Es entonces que el cliente establece la conexion entre su puerto X+1 y el puerto Z del server. La conexion se inicia desde el cliente y el firewall/proxy lo deja pasar. El problema con el modo pasivo es que el server "debe" tener habilitados cierto numero de puertos para conexion con los clientes.
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

Re: DADO Necesita ayuda para probar rutina de FTP

Mensaje por Dado »

@condor0086 @ironman

Les envie una version BETA de prueba, me avisan si no la reciben para volver a enviarla.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Cerrado