Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
Exclamation Manejar diálogo de Internet explorer

Buenas a todos...la cuestión es la siguiente tengo una aplicación desarrollada en Delphi 6, cuyo fin es automatizar la descarga de archivos mediante un WebBrowser, la pregunta es la siguiente cuando se abre el diálogo de la descarga de archivos tengo forma de simular el click en el botón Guardar?
Responder Con Cita
  #2  
Antiguo 13-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¿Y cuál es el motivo de usar un "WebBrowser" para esa tarea? Lo digo porque con un componente "IdHttp", por poner un caso, podrías acceder a recursos en Internet y descargarlos sin intervención alguna del usuario... Pienso además que aunque consiguieras "hacer clic" en el correspondiente botón, todavía no podrías saber, por ejemplo, cuándo terminó de descargarse cierto archivo, si hubo problemas en su descarga, etc., etc.

Bueno. Nada es imposible, pero, tengo esa curiosidad, ¿porqué usar un "WebBrowser"?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 13-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y cuál es la finalidad de usar el WebBrowser? ¿Por que no usas las componentes Indy, en específico la TIdHTTP, que te permite interactuar con un servidor sin el "estorbo" de la interfaz que supone algo como el WebBrowser?

// Saludos
Responder Con Cita
  #4  
Antiguo 13-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Telepatía. A eso se le llama telepatía, por lo menos.

En el mismo minuto, señores, sin previo acuerdo ni nada.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 13-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Válgame! Dijimos prácticamente lo mismo

// Saludos
Responder Con Cita
  #6  
Antiguo 13-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por dec
Hola,

Telepatía. A eso se le llama telepatía, por lo menos.
A eso se le llama Eco
Responder Con Cita
  #7  
Antiguo 13-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Yo intuyo que el compañero quiere presentar al usuario una lista de enlaces. En un "WebBrowser". Pudiera hacerse de otro modo, pero, si se tratara de esto que digo, lo que acaso podría hacerse es presentar al usuario un "WebBrowser", de acuerdo, pero, "interceptar" cuando el usuario hace "clic" en una determinada URL, de manera que "cancelemos" el comportamiento del "WebBrowser" y comenzemos la descarga del archivo utilizando el componente que se considere oportuno, por ejemplo, el mencionado "IdHttp".

No sé. El compañero tendrá que decir algo y aun algos también.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 13-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
Estuve usando idhttp pero cuando llego al link no esta directamente el archivo para descargar por ej http://www.sitioweb.com/archivo.zip sino que solo tengo la url donde estaria el archivo ej: http://www.sitioweb.com/nn?cmd=downl...m=12941&prod=4 probe con urlmon y descarga cualquier cosa.
Responder Con Cita
  #9  
Antiguo 13-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No debería haber problema en ese sentido con el componente "IdHttp". Es decir, al componente le da igual que el archivo esté en la URL "http://www.pepe.com?archivo=322", siempre que esa URL al cabo lleve al recurso que nos interesa. Si al cabo esta última URL retorna el archivo que te interesa descargar, el componente "IdHttp" lo descargará sin problemas. Vamos, o estoy completamente equivocado, que me parece que no, en este caso, pero, todo puede ser.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 13-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El sitio web en cuestión, ¿requiere algún tipo de autenticación? Hace poco se comentó esto ya que tales sitios suelen manejar una cookie y tu coomponente IdHttp deb poder procesarla.

// Saludos
Responder Con Cita
  #11  
Antiguo 13-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Puede que el problema no sea la dirección si no la Sesión o las Cookies. Si copias y pegas directamente esa dirección en un navegador ¿puedes bajar el archivo?, o por el contrario necesitas abrir primero otra pagina para poder acceder a la descarga del archivo. Si es así, date una vuelta por el hilo de Automatización Web del compañero Al, donde intentamos hacer algo parecido
Responder Con Cita
  #12  
Antiguo 13-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, peroooo... esta telepatía
Responder Con Cita
  #13  
Antiguo 13-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
si copio y pego esa direccion me da un error por eso usé anteriormente idhttp con el método post poniendo usuario y contraseña, pero aparentemente cuando se ejecuta el post no me devuelve la pagina en donde están dichos enlaces...
Responder Con Cita
  #14  
Antiguo 13-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Si ya hablamos de temas de autenticación reitero mi propuesta de que leas el post sobre Automatización Web, allí encontraras consejos sobre como utilizar el componente IdHttp para que acepte cookies, redirecciones, etc. Tampoco dices que te esta devolviendo, solo dices que no es lo que tu esperabas pero seria interesante si se trata por ejemplo de algún mensaje de error.

Y por ultimo te recomiendo una herramienta que te puede ser muy útil

http://www.fiddlertool.com/fiddler/

con ella podrás echarle un vistazo a la comunicación entre el explorador y la pagina que te interesa y asi saber mejor como reproducirlo.
Responder Con Cita
  #15  
Antiguo 13-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Mira a ver si te sirve esta función que hice:

Código Delphi [-]
(**
 * Descarga un recurso http
 *
 * @param Url - recurso a descargar
 * @param UrlInicio - url de la página para iniciar sesión
 * @param Usuario, Password - usuario y contraseña para autenticación
 * @param Contenido - Stream que recibe los datos, debe estar ya creado.
 *)
procedure Descargar(const Url, UrlInicio, Usuario, Nip: String; Contenido: TStream);
var
  IdHttp: TIdHttp;
  Campos: TStringList;

begin
  IdHttp := TIdHttp.Create;
  Campos := TStringList.Create;

  try
    IdHttp.HandleRedirects := true;
    IdHttp.AllowCookies := true;
    IdHttp.HTTPOptions := IdHttp.HTTPOptions + [hoForceEncodeParams];

    Campos.Values['usuario'] := Usuario;
    Campos.Values['nip'] := Nip;

    IdHttp.Post(UrlInicio, Campos);

    IdHttp.Get(Url, Contenido);
    Contenido.Position := 0;

  finally
    IdHttp.Free;
    Campos.Free;
  end;
end;

// Saludos

Última edición por roman fecha: 13-11-2006 a las 22:21:51.
Responder Con Cita
  #16  
Antiguo 14-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
Muchas gracias comienzo a probar y te comento.
Responder Con Cita
  #17  
Antiguo 14-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por lpedrazzi
Quisiera saber si sabes de que se trata este valor que me devuelve
SESSIONID=amXCdPaluGH4s29AL7.. sera la cookie session para validar el login?
Exactamente esa cookie se utiliza para identificar la sesión. La cosa funciona así, la primera vez que acedes a la pagina, este te devuelve la cookie con un identificador. Tu navegador cada vez que accedes a esa misma pagina o a otra del mismo sitio, manda esa cookie, de esa forma el servidor puede rastrear la sesión. Si cierras el navegador y vuelves a acceder a la pagina, el servidor mandara un identificador diferente para identificar la nueva sesión.

Ahora pensemos en un ejemplo. Accedemos a la pagina de login, entonces recibimos una cookie con el identificador de sesión. Enviamos el nombre de usuario y contraseña por POST, y también enviamos la cookie. Ahora estamos identificados en esa sesión, de esta forma cada vez que accedamos a una pagina en ese servidor en esa misma sesión el servidor sabrá que estamos logueados.

Esto puede parecer complicado, pero es tan simple como decirle idHttp que acepte cookies, o usar Wininet. Ellos se encargaran de manejar las cookies sin que tengas tu que hacer nada.
Responder Con Cita
  #18  
Antiguo 14-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
Cita:
Empezado por seoane
Exactamente esa cookie se utiliza para identificar la sesión. La cosa funciona así, la primera vez que acedes a la pagina, este te devuelve la cookie con un identificador. Tu navegador cada vez que accedes a esa misma pagina o a otra del mismo sitio, manda esa cookie, de esa forma el servidor puede rastrear la sesión. Si cierras el navegador y vuelves a acceder a la pagina, el servidor mandara un identificador diferente para identificar la nueva sesión.

Ahora pensemos en un ejemplo. Accedemos a la pagina de login, entonces recibimos una cookie con el identificador de sesión. Enviamos el nombre de usuario y contraseña por POST, y también enviamos la cookie. Ahora estamos identificados en esa sesión, de esta forma cada vez que accedamos a una pagina en ese servidor en esa misma sesión el servidor sabrá que estamos logueados.

Esto puede parecer complicado, pero es tan simple como decirle idHttp que acepte cookies, o usar Wininet. Ellos se encargaran de manejar las cookies sin que tengas tu que hacer nada.

Amigo aqui esta el pedacito e código que estoy intentando implementar sin conseguir resultados positivos aun, he puesto las propiedades en true del idhttp1 para haceptar las cookies, me parece que ahora estoy fallando en lo que envío en el post, el action de la etiqueta del form dice action="/md" method="post" como debería armar el post...en el fiddler me figura

http://www.alfabeta.net/md-downloads...mdat=miusuario

Código Delphi [-]
var
datosPost: TIdMultiPartFormDataStream;
begin
datosPost := TIdMultiPartFormDataStream.Create;
try
datosPost.AddFormField('cmd', 'login');
datosPost.AddFormField('stylesheet', 'md.xls');
datosPost.AddFormField('Usuario', 'mi_usuario');
datosPost.AddFormField('pwd', 'mi_contraseña');
datosPost.AddFormField('x', '0');
datosPost.AddFormField('y', '0');
try
idhttp1.AllowCookies := true;
idHttp1.Request.Referer := 'http://www.alfabeta.net/md.xtp';
memo1.Clear;
memo1.lines.Add(idHttp1.Post('http://www.alfabeta.net/md.xtp', datosPost));
finally
idHttp1.Free;
end;
finally
datosPost.Free;
end;

Última edición por dec fecha: 14-11-2006 a las 22:17:18.
Responder Con Cita
  #19  
Antiguo 14-11-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No entiendo. El código que muestras sólo maneja la parte del login, ¿en qué momento haces la petición del archivo?

¿Probaste la función que puse?

// Saludos
Responder Con Cita
  #20  
Antiguo 14-11-2006
lpedrazzi lpedrazzi is offline
Miembro
 
Registrado: sep 2005
Posts: 33
Poder: 0
lpedrazzi Va por buen camino
Cita:
Empezado por roman
No entiendo. El código que muestras sólo maneja la parte del login, ¿en qué momento haces la petición del archivo?

¿Probaste la función que puse?

// Saludos
El problema es que todavía no puedo pasar del login, en teoría una vez ya iniciada la sesion me mostraría los links para descargar dichos archivos. En cuanto a la funcion me dice que el stream lo tengo que tener creado pero me salta un error con el stream me dice que no puse el seek.

asi estoy haciendo el llamado..

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  Contenido:TStream;
begin
  Descargar('http://www.alfabeta.net/md.xtp','http://www.alfabeta.net','mi_usuario','mi_pass',Contenido);
end;

Última edición por dec fecha: 14-11-2006 a las 22:17:32.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cerrando Internet Explorer johnyague API de Windows 4 04-09-2007 18:48:28
Internet Explorer 7 Final dec Noticias 6 23-10-2006 01:56:40
Acceso al internet explorer vicrati Varios 5 16-08-2006 13:51:22
Delphi 7.0 e Internet Explorer Maury Manosalva Internet 2 14-08-2006 17:55:33
No se ven imagenes en Internet Explorer Albano Internet 10 09-01-2006 20:43:51


La franja horaria es GMT +2. Ahora son las 10:00:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi