• Sábado 18 de Mayo de 2024, 10:44

Autor Tema:  Problema Con Control Inet  (Leído 2632 veces)

crispi

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Problema Con Control Inet
« en: Viernes 17 de Diciembre de 2004, 17:53 »
0
Tengo un problema con el control Inet, y es que solo me envía una parte de los datos de una página. Ej:

Tengo el siguiente codigo:

Resultado = Inet.OpenURL("www.softonic.com", 0)
Open "C:\Prueba.txt" For Output As #1
   Print #1, Resultado
Close

y lo que se graba en Prueba.txt es:

Citar
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Softonic.com: emule, msn messenger, kazaa, nero, software, programas gratis</title>
<meta name="title" content="Softonic.com: Windows - emule, msn messenger, kazaa, nero, software, programas gratis">
<meta name="description" content="El website hispano líder en descargas de shareware, freeware, juegos, salvapantallas y software gratis. Incluye emule, kazaa, divx, nero, winamp, mp3, msn messenger. Todo en español, más de 25.000 programas, 3.000 áreas, y soporte para Windows, Macintosh, Linux, Palm OS, Pocket PC y Móviles.">

Osea, solo una pequela partecita de la pagina de softonic, no me tendria que devolver todo el codigo de fuente de la pagina??

Muchas Gracias

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Problema Con Control Inet
« Respuesta #1 en: Sábado 18 de Diciembre de 2004, 08:28 »
0
Hola Crispi.

Lo que te ocurre es que has guardado el contenido de un buffer en un solo llenado del mismo. Debes ir llenando ese buffer en sucesivas llamadas a GetChunck en el evento StateChanged del control. Fíjate en el ejemplo que pone en la ayuda del control.

Citar
En general, usará el evento StateChanged para determinar el momento de recuperar los datos con el método GetChunk. Para esto, utilice una instrucción Select Case y compruebe si el estado es icResponseReceived (8) o icResponseCompleted (12).

Observe, sin embargo, que el estado icResponseReceived puede ocurrir cuando el control ha terminado una operación que no transmitió datos al búfer. Por ejemplo, cuando se conecta con un sitio FTP, el control realizará con el sitio un procedimiento de protocolo que no provoca ninguna transferencia de datos y, sin embargo, se produce el estado icResponseReceived.

Por otra parte, el estado icResponseCompleted se produce cuando una operación se ha completado por entero. Por ejemplo, si utiliza el método Execute con la operación GET para obtener un archivo, el evento icResponseCompleted sólo se producirá una vez, después de recuperar todo el archivo.

En la práctica, el uso del estado icResponseReceived permite analizar los datos hasta haber recuperado únicamente la información necesaria (por ejemplo, al obtener un archivo HTML, puede recuperar sólo los encabezados). Cuando ya tenga la información necesaria, puede cancelar el resto de la recuperación. Si, por el contrario, precisa recuperar todo el archivo, el estado icResponseCompleted le indicará que la transferencia ha terminado y que puede continuar.

Citar
Private Sub Inet1_StateChanged(ByVal State As Integer)
  ' Recupera la respuesta del servidor con el método
  ' GetChunk cuando State = 12. En este ejemplo se
  ' supone que los datos son texto.

  Select Case State
  ' ... No se muestran los demás casos.

  Case icResponseReceived ' 12
      Dim vtData As Variant ' Variable de datos.
      Dim strData As String: strData = ""
      Dim bDone As Boolean: bDone = False

      ' Obtiene el primer bloque.
      vtData = Inet1.GetChunk(1024, icString)
      DoEvents
      Do While Not bDone
        strData = strData & vtData
        DoEvents
        ' Obtiene el bloque siguiente.
        vtData = Inet1.GetChunk(1024, icString)
        If Len(vtData) = 0 Then
            bDone = True
        End If
      Loop

      txtData.Text = strData
  End Select
 
End Sub

Suerte.