Las finalidades que tiene el interactuar con una página web externa son bastantes y van en cada uno; ya sea extraer información o comunicarse con un servicio en la web son cosas que podemos hacer de varias formas en Visual Basic .NET.

Para esta tarea no usaremos CURL (existen implementaciones para muchos lenguajes) más bien haremos uso del elemento WebBroser que proporciona la plataforma y adicionalmente se va a interactuar con los elementos HTML de la página, tal y como si estuviéramos usando JavaScript.

Para hacer el ejemplo más entendible construiremos nuestro propio formulario en PHP y lo ejecutaremos de forma local. El código con el que trabajaremos será este:

<?php
if(isset($_POST['registrar'])) {
	$nombre = $_POST['nombre'];
	$pass = $_POST['pass'];
	echo "Nombre: ".$nombre."<br />";
	echo "Password:".$pass;
}
?>
<!DOCTYPE>
<html>
<head>
</head>
<body>
	<form method="post">
		<label>Ingresa tu nombre:</label><br />
		<input type="text" name="nombre" id="nombre" /><br />
 
		<label>Ingre la contrase&ntilde;a</label><br />
		<input type="text" name="pass" id="pass" />
		<br />
		<input type="submit" name="registrar" id="registrar" value="Registrarse" />
	</form>
</body>
</html>

El código lo que hace es capturar un nombre de usuario y una contraseña, y luego los muestra por pantalla. Un ejemplo muy simple pero servirá para nuestro propósito. Ahora, en Visual Basic .NET crearemos una interfaz como la siguiente agregando:

  • 2 Labels.
  • 2 textbox.
  • 1 control WebBrowser.
  • 1 botón.

La idea es que quede algo como esto:

Bot simple en VB .NET

Los controles textbox nos ayudarán a rellenar los dos campos del formulario en PHP que piden usuario y contraseña. Bien, para ello, en el evento Load cargaremos el fichero PHP y en el evento click de nuestro botón, las funciones que llenan automáticamente el formulario y lo procesan:

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WebBrowser1.Document.GetElementById("nombre").SetAttribute("value", TextBox1.Text)
        WebBrowser1.Document.GetElementById("pass").SetAttribute("value", TextBox2.Text)
        WebBrowser1.Document.GetElementById("registrar").InvokeMember("click")
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("http://localhost/ejemplo.php")
    End Sub
End Class

Lo que hace el código, tal y como si estuviera trabajando con el DOM de JavaScript, es cargar la página en el navegador, luego, buscar a través de los elementos ID de nuestra página HTML y llenarlos con los campos que habíamos puesto en los textbox y por último a través del método SetAttribute cambiarle el valor, que es como se rellena el formulario.

Sin embargo, la última línea de código del evento click del botón no cambia ningún atributo, lo que hace es invocar a un miembro o evento predeterminado llamado “click” y con esto es como hace click (valga la redundancia) en el botón y la página procede a procesar los datos.

Descargar los ficheros de ejemplo.