Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

CÓMO: Automatizar Internet Explorer para utilizar el método POST con los datos de los formularios

Para obtener una versión de este artículo para Microsoft Visual Basic 6.0, vea 167658.

EN ESTA TAREA

Resumen
Un controlador de automatización, como Microsoft Visual Basic, puede automatizar Microsoft Internet Explorer para enviar datos mediante el método POST a un servidor HTTP, como Servicios de Microsoft Internet Information Server (IIS). En este artículo se explica cómo automatizar Internet Explorer para utilizar un método POST con los datos de un formulario desde una aplicación Visual Basic .NET. Aunque los ejemplos ilustran la automatización de toda la aplicación Internet Explorer, las mismas técnicas pueden aplicarse al control ActiveX del explorador Web cuando se aloja en una aplicación.

Volver al principio

Más información

Hay varios métodos para enviar datos a un servidor HTTP. GET y POST son los dos más comunes. POST se suele usar para enviar datos de un formulario a un servidor HTTP cuando superan el límite máximo de transferencia permitido en el método GET. Normalmente, este límite es de 2 kilobytes (KB).

Internet Explorer muestra la interfaz IWebBrowser(App) para los controladores de automatización. La interfaz IWebBrowser(App) posee un método Navigate. En la sintaxis del Lenguaje de definición de interfaces (IDL, Interface Definition Language), una representación universal de la que se deriva tanto la sintaxis de Visual Basic como la de Visual C++, el método Navigate tiene una apariencia similar a la siguiente:
HRESULT Navigate([in] BSTR URL, [in] VARIANT* Flags,[in] VARIANT* TargetFrameName, [in] VARIANT* PostData,[in] VARIANT* Headers);				
Para utilizar el método POST, sólo son relevantes los parámetros URL, PostData y Headers.

Para llamar al método Navigate y enviar con POST los datos de un formulario a un servidor HTTP, el parámetro URL debe especificar una dirección válida, el parámetro PostData debe contener un SAFEARRAY de bytes y el parámetro Headers debe incluir una BSTR que contenga el siguiente encabezado HTTP:
Content-Type: application/x-www-form-urlencoded
Este encabezado indica que los datos que se están enviando se codifican de acuerdo con las reglas establecidas en la especificación HTML.

Observe que el objeto window del Modelo de objetos de secuencias de comandos de Internet Explorer tiene también un método navigate. Este método navigate sólo aceptará una dirección URL y no se puede usar para enviar datos con POST a un servidor Web.

Volver al principio

Pasos para implementar la técnica

  1. Guarde el siguiente código de Páginas Active Server (ASP) en un archivo, Navpost.asp, de un directorio situado en un servidor Microsoft Windows NT 4.0 o Microsoft Windows 2000 donde se use IIS versión 4.0 ó 5.0. El directorio debe ser reconocido por IIS como una raíz virtual con permisos de ejecución:
    <%@ Language=VBScript %> <HTML>      <%      cFlavor = Request("Flavor")      cName = Request("FName")      %>      <BODY>      Hello, <% =cName %>.      One scoop of <% =cFlavor %> coming right up!      </BODY> </HTML>					
  2. Inicie un nuevo proyecto EXE estándar en Visual Basic .NET. De manera predeterminada se creará Form1. Agregue los controles siguientes a Form1:
    ObjetoNombreTítulo
    LabellblNameNombre
    LabellblFlavorSabor
    CommandButtoncmdSubmitEnviar
    ComboBoxcboFlavor
    TextBoxtxtName
  3. En el menú Proyecto, haga clic en Agregar referencia, en la ficha COM desplácese hacia abajo para seleccionar Microsoft Internet Controls (Shdocvw.dll) y haga clic en Seleccionar.
  4. Importe el espacio de nombres System.Text. La clase ASCIIEncoding proporciona un método para convertir cadenas en una matriz de bytes.
    Imports System.Text
  5. Incluya el código siguiente dentro de Class Form1 en Form1.vb:
    Private Sub cmdSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSubmit.Click        Dim ie As SHDocVw.InternetExplorer        Dim vPost As Object        Dim vHeaders As Object        Dim cFlavor As String        Dim cParamFlavor As String        Dim cParamName As String        Dim cPostData As String        Dim cSeparator As String        cFlavor = cboFlavor.Items(cboFlavor.SelectedIndex)        cParamFlavor = "Flavor="        cSeparator = ""        cParamName = "FName="        cPostData = cParamName & txtName.Text & cSeparator & cParamFlavor & cFlavor        vHeaders = "Content-Type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)   	'Convert the string to post to an array of bytes.        vPost = ASCIIEncoding.ASCII.GetBytes(cPostData)	'Create an instance of Internet Explorer and make it visible.        ie = New SHDocVw.InternetExplorer()        ie.Visible = True        ie.Navigate2("http://<web server>/navpost.asp", , , vPost, vHeaders)End SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load           cboFlavor.Items.Add("Vanilla")           cboFlavor.Items.Add("Chocolate")           cboFlavor.Items.Add("Strawberry")           cboFlavor.SelectedIndex = 0End Sub						
  6. Modifique la dirección URL en la llamada al método Navigate, según corresponda. Salga de todas las instancias de Internet Explorer y, en el menú Ejecutar, haga clic en Inicio.
  7. Escriba su nombre en el cuadro Nombre, seleccione un sabor y haga clic en Enviar.

    Los datos del formulario Visual Basic se enviarán al servidor HTTP y la respuesta aparecerá en la ventana visible del explorador.
Volver al principio
Referencias

Para obtener información adicional acerca de cómo usar WinInet para simular una solicitud POST en un formulario, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
165298 CÓMO: Simular una solicitud de envío de formulario con WinInet
Para obtener información adicional acerca de cómo usar URL Moniker para simular una solicitud POST en un formulario, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
165800 PostMon.exe muestra cómo usar URL Moniker para hacer un POST de los datos
311294 CÓMO: Alojar un control WebBrowser en Visual Basic .NET para utilizar el método POST con los datos de los formularios
Volver al principio
kbwebbrowser kbpost
Propiedades

Id. de artículo: 311293 - Última revisión: 03/23/2007 15:46:15 - Revisión: 2.0

  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • kbhowtomaster KB311293
Comentarios