Duda VB6 - Logueo en Internet

Publicado por demono, Marzo 02, 2007, 12:53:05

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

demono

Buenas!
La verdad que me estoy volviendo loco, no estoy seguro que exista la funcion que estoy buscando pero con probar no pierdo nada. Lo que necesito es realizar un programa utilizando una función que primeramente navegue solo, o me deje rellenar X campo sin la necesidad de usar Sendkeys TAB para alcanzarlo. Existe dicha funcion? El VB podrá hacer eso?

Ayuda   :-[

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Predicador

Hola, googleado de por ahi:
Public Function GetPageHTML( _
           ByVal URL As String) As String
  ' Retrieves the HTML from the specified URL
  Dim objWC As New System.Net.WebClient()
  Return New System.Text.UTF8Encoding().GetString( _
     objWC.DownloadData(URL))
End Function

Here's an example of its usage:
strHTML = _
   GetPageHTML("http://www.karlmoore.com/")

baii
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

demono

Ese código según veo sirve para descargar la página.

La idea es crear un EXE, el cual contenga una serie de textbox que, al enviar informacion completen un formulario de internet. Según estuve viendo, estoy creando un código que vaya completando, pero no tengo idea como hacer para que "presione" el boton OK, ya que creo lograr que me llene el formulario pero no envia informacion.

El código con el que ando trabajando es el siguiente:

Inet1.Execute "http://www.atconcert.com.ar/index.php?a=enviarfecha", "POST", "fecha=" + Text3.Text + "&hora=" + Text4.Text + "&banda= " + Text5.Text + " &bandasinv= " + Text6.Text + " &prov= " + Text7.Text + " &lugar= " + Text8.Text + " &precio= " + Text9.Text + " &afiche= " + Text1.Text + "&info=" + Text2.Text

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Camello_AR

#3
de VB6 no caso un fulbo pero si de HTTP por lo que te ayudo de ese lado

Vos no necesitas cargar los campos de una pagina, sino directamente enviar la info a la página siguiente (la que interpreta los resultados)

Suponiendo que tenes la pagina 1 que se llama "formulario.php" y la pagina 2 "cargardatos.php" (a veces puede ser un nombre como "cargardatos.php?f=formulario1" como en tu caso)

EN HTTP tenes dos formas (tres en realidad pero nos interesan 2) de enviar info: El Metodo "GET" y el metodo "POST"
La diferencia radica en que en el metodo "GET" el envio de variables se realiza a traves de linea de comando en forma transparente al usuario, en tanto que el metodo "POST" utiliza las cabeceras HTTP (envia la informacíon en el bloque de petición) de forma "practicamente" oculta al usuario (podes ir a información de pagina en Firefox y ver la data que se envió en POST)

Volviendo, vos directamente necesitas "pedir" la pagina 2. El tema que si esta preparada para recibir los datos get es muy facil (de hecho haces un run o exec -no recuerdo el comando de VB - ("start URL") ) y la url la armas combinando los datos fijos (dirección, nombre de variables) y tus variables (ej: http://dominio/cargar.php?V1=%var1%&V2=%var2% donde V1, V2 es el nombre de los campos del formulario (en la pagina 1) y %var1%, %var2% es la info que cargas en los textbox)

Para usar el metodo post quizas te sirva lo que vos pusiste en el segundo mensaje

Saludos

EDIT: EN un get la estructura es


pagina - http://dominio/pagina
inicio de variables - ?
nombre de 1er variable - (ej usuario)
asignador de valor - =
valor 1er variable - (ej juan)
separador de variables (si hay mas de una) - &
y repite desde nombre hasta valor por cada variable
asi te queda


http://dominio/pagina?usuario=juan&accion=editar&identificador=1500

Predicador

Correcto, tal cual dice Camello, por eso te daba el codigo para acceder a la pagina, no necesitas mas.
Ahora como saber cual es la pagina que recibe los datos? facil, fijate el el codigo HTML de la pagina que contiene el formulario por el TAG FORM que ese es donde dice a donde hace el post de la informacion.
Baii
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

demono

#5
Eso terminé haciendo, lo que hace basicamente es completar VARIABLEs, no campos,  pero tuvimos que poner un script que cuando se completen todas las variables envíe todo a la Base de Datos.

Habrá alguna forma de hacerlo directamente que complete los campos y "Apriete enviar"?


Encontré este código Google-ando:

CitarPrivate Sub Form_Load()
Inet1.Execute "http://servername/login.asp", "POST", "username=foo&pwd=bar"
End Sub

Lo que puedo asumir es que completa los campos con el metodo post, pero no entiendo como haría para enviar los datos...

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Camello_AR

Es que tenes (al menos eso parece) un error conceptual en el funcionamiento del sistema HTTP, o al menos no explicas bien todo

Se entiende que vos tenes un soft con un formulario que tiene una cantidad de campos similar a los de una pagina web X (digamos un formulario de registro) y vos queres que ese formulario se envie a la pagina. Entonces lo que vos entendes que debes hacer es trasladar los datos de tu aplicacion al formulario, cuando directamente debes "pasar" por los metodos antes expuestos, los datos a la pagina que procesa el formulario (recorda que como dije un sistemas de formularios se basa de dos paginas, una que carga y otra que procesa (puede ser la misma page pero con distintas funciones definidas por una variable como este sitio que el action= o topic= al final del index.php definen que hacer)

Me gustaría que aclares todo para poder ayudarte mejor

demono

Exactamente, creo que me estoy explicando pal toor  :P

Es así:
Tengo un programa hecho en Visual Basic con una cantidad de campos, los cuales coinciden con los de una web, y la idea mia es enviarlos mediante algún método (Sin tener que insertar como hice un script del lado de la página) para que este programa
envíe los datos a una web "insertandolos en los campos de esta misma y enviandolos".

En otras palabras: Necesitaría que el programa llene automaticamente los campos y envíe los datos (Presumiendo que tenga un boton "submit" el formulario que lo "apriete" o de alguna forma envíe los datos).


Presumiendo que la página contenga lo siguiente:
<input type="text" name="user" size="10">
<input type="password" name="pass" size="10">
<input type="submit" value="OK">

Como haría para enviar los datos?


CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Predicador

De la misma manera que vos lo estabas haciedno, solo hay que ver mas de la pagina que decis (por ejemplo, todo lo que esta en el tag FORM) para saber a que pagina enviar los datos; recorda que enviar un formulario (apretar el boton de send) no es mas que llamar a otra pagina enviandole variables.
Baii
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

demono

Ahi tamos :)
Entonces, aludiendo a lo que dice Predi: Como se podría saber sin tener acceso a la administracion de la página a cual le envia las variables?

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

elrosti

Si te referis a saber cual es la pagina que tenes que enviarles las variables, la podes saber viendo el codigo fuente de la pagina y buscando el tag <FORM....> y buscando donde dice "ACTION=", lo que viene despues del signo de "=" es la pagina a la que se le van a enviar las variables. A esta le tenes que concatenar la ruta desde la cual te encuentras, es decir, si dice "pagina2.php" y tu te encuentras en "www.misitio.com/carpeta1/index.php", tu dirección será "www.misitio.com/carpeta1/pagina2.php".

Tomando el ejemplo que vos pusiste, la dirección que vos deberias escribir para mandar las variables es.

"www.misitio.com/carpeta1/pagina2.php?user=MI+NOMBRE&pass=CONTRASEÑA"

Aunque esto a veces no siempre funciona, puede haber algunos chequeos de seguridad que te impediran hacer esto.

Si lo que estas intentando hacer es un ataque por "bruteforce" te diria que no pierdas el tiempo.

Saludos.
Yo no lo quería creer..... pero ella me convenció.

demono

No, por lo contrario, mi idea es automatizar la administracion de una página web que estamos haciendo, nada más que eso...probemos ;)

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Camello_AR

Estuve mirando un poco (gracias SanG) y vi que este comando viene vien rumbeado, salvo algunas correcciones
Cita de: demono en Marzo 04, 2007, 16:26:11
...
El código con el que ando trabajando es el siguiente:

Inet1.Execute "http://www.atconcert.com.ar/index.php?a=enviarfecha", "POST", "fecha=" + Text3.Text + "&hora=" + Text4.Text + "&banda= " + Text5.Text + " &bandasinv= " + Text6.Text + " &prov= " + Text7.Text + " &lugar= " + Text8.Text + " &precio= " + Text9.Text + " &afiche= " + Text1.Text + "&info=" + Text2.Text

Salvo que al final de text2.text tenes que poner

, "Content-Type: application/x-www-form-urlencoded"

y el bloque de armado de variables para que quede más limpio te conviene reemplazarlo por


Dim data As String
...
data = "fecha=" & Text3.Text & "&hora=" & Text4.Text & "&banda= " & Text5.Text & " &bandasinv= " & Text6.Text & " &prov= " & Text7.Text & " &lugar= " & Text8.Text & " &precio= " & Text9.Text & " &afiche= " & Text1.Text & "&info=" & Text2.Text
...
Inet1.Execute "http://www.atconcert.com.ar/index.php?a=enviarfecha", "POST", data, , "Content-Type: application/x-www-form-urlencoded"


Te comento: Lo unico que hice fue mirar la plantilla de la página que pasaste para ver los campos, te arme el data afuera (en general es preferible generar antes la variables, al menos cuando estas probando, porque es mas facil depurar, vos queres ver que tiene la variable y metes un "msgbox(data)" (o equivalente en VB6) y ves la variable antes de enviar. Si todo funciona podes copiar el armado al inet1.execute

Tambien te cambie los + por & en el data poruqe asi lo vi en varios sitios que entre

Te agrege una cabecera de tipo de contenido

Proba y decime (y eso que de VB6 no caso un fulbo, pero la programación siempre sera programación)

demono

Algun dia te dije Camello que sos groso?  :palmas: :palmas: :palmas: :palmas:
Funciona de 10, se ve que eso es lo que le faltaba agregar al código.

Con respecto a los & y la suma de variables es lo mismo ya que si daría la misma cadena, pero igualmente esta perfecto :D


Mil gracias  :jaja:

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Camello_AR

Por nada y no soy nada groso de HTTP algo entiendo pero de  VB ni idea, de hecho en programación visual solo hice alunas boludeces en delphi (versión 1 o 2) que empece un curso de esos por revista y cuando empezó a aumentar lo deje (de 5 mangosw 2 revistas, a 5 mangos una y 7/8 mangos despues en el 98 medio carito)