VBNätverkInet (Microsoft Internet Transfer Control)
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Stränghantering API DDE Nätverk

Inet (Microsoft Internet Transfer Control)

Det finns många sätt att hantera nätverk med hjälp av VB. Ett av de enklaste sätten är att använda sig av Inet kontrollen som kapslar HTTP och FTP protokollen.

Det kan kanske kännas onödigt att skriva egna program för hantering av dessa protokoll eftersom man oftast använder HTTP i en browser, och det dessutom finns färdiga FTP program att ladda ner från Internet. Det har dock visat sig att man kan behöva dessa.

För att använda Inet kontrollen måste man välja Projekt, Components menyn eller högerklicka på toolboxen (som oftast finns längst till vänster i VB:s miljö). I listan som kommer skall man välja ("kruxa för") Microsoft Internet Transfer Control X.0, där X är 5 för VB 5.0 och 6 för VB 6.0. I toolboxen kommer då en ny Inet komponent som ser ut som en liten jordglob med en dator framför sig. Om ni använder en miljö där inte kontroller kan användas direkt kan ni använda er av
Set objekt = CreateObject("InetCtls.Inet.1") för att få tillgång till Intekontrollens funktionalitet. I ASP används
Set objekt = Server.CreateObject("InetCtls.Inet.1")

I alla exempel antas att ni har en Inet kontroll placerad på formen och att den heter Inet1.

Inet kontrollens properties (jag tar bara upp de egenskaper som är unika för denna typ av kontroll, bland annat Name och Index som finns för de flesta kontrolltyper tas inte upp):

Property Giltiga värden Användning

AccessType

läs och skrivbar

0 icUseDefault
1 icDirect
2 icNamedProxy

Används för att bestämma det skall användas en proxy. icDefault (eller 0) betyder att de inställningar som finns inställda i Internet inställningarna i Control Panel skall användas, icDirect (1) betyder att ingen proxy skall användas och icNamedProxy betyder att man skall använda en proxy oavsätt systemts inställningar. Om man anger icNamedProxy måste även Proxy propertyn ställas in. Oftast funkar det utan proxy, varför man inte behöver abvända denna property.

Document

 

en path och filnamn. t.ex
"samples/test.htm"
URL propertyn kan ange en komplett sökväg till en fil, t.ex.
Inet1.URL = "http://www.site.fi/test/fil.htm".
Om man vill kan man dela upp detta som:
Inet1.URL = "http://www.site.fi"
Inet1.Document = "test/fil.htm".
Se även URL propertyn

hInternet

endast läsbar

  Används för att få en internet handle. Används ionte i VB men kan behövas för internet API anrop
Password Ett lösenord. tex. "hemligt" Används tillsammans med UserName propertyn för FTP. Det finns två typer av FTP access:
1. Anonym
Inet1.UserName = "anonymous"
Inet1.Password = "användarens email adress"
Personlig:
Inet1.Password = "ditt lösenord"
Inet1.UserName = "ditt användarnamn"
Protocol icUnknown (0)
icDefault (1)
icFTP (2)
icReserved (3)
icHTTP (4)
icHTTPS (5)
Oftast anges protokollet i URL:n henom att börja med "http://" eller "ftp://". Maqn kan dock ange detta separat. Om man gör det kommer URL att ändras enligt det nya protolollet. T.ex
Inet1.URL = "http://www.site.com/"
Inet1.Protocol = icFTP
MsgBox Inet1.URL ' kommer att visa "ftp://www.site.com"
(https är secure http ifall ni inte visste det...)
Proxy ftp=proxy:port
http=proxy:port
proxy:port
ftp=proxy:port http=proxy:port
För att ange vilken proxy som skall användas. Om man inte anger ftp= eller http= kommer proxyna att använad för både http och ftp
Exempel:
Inet1.Proxy = "ftp=ftpProxy:123 HTTP=httpProxy:131"
Används med AccessType propertyn
RemoteHost ett host namn t.ex bet.puv.fi Om man ändrar på denna property efter att ha satt URL propertyn kommer denna att ändras så att den avspeglar den nya hosten
RemotePort Ett TCP/IP portnummer

Om man inte anger detta kommer port 80 att användas för HTTP och port 21 att användas för FTP. OM ni brukar annvända adreser av typen: "http://ww..site.com:8080" så betyder detta:
Inet1.URL = "http://ww..site.com"
Inet1.Port = 8080

RequestTimeout Tid i sekunder tills en Time Out skall ske. 0 betyder oändligt (dålig idé) Om ni ofta använder en "trög" sderver kan ni kanske prova med lite olika tal här...
ResponseCode
endat läsbar
  Sker endast om StateChanges händelsen ger icError (11) som status. Använd ResponseInfo för beskricning av felet
ResponseInfo
endats läsbar
  Se ResponseCode
StillExecuting
endast läsbar
  Används för att kontrollera om Inet kontrollen fortfarande håller på och utför en överföring
URL En URL t.ex.
"ftp://ftpserver.com/" eller
Anger URL ("internet adressen") som skall användas. Se även:
Document, Protocol, Proxy, RemoteHost och RemotePort
UserName användarnamn (i FTP) Se Password propertyn för beskrivning

Inet kontrollens Metoder:

Metod Returvärde Användning
Cancel inget Avbryter transfern och bryter förbindelsen
Execute inget Utför kommandon. Se separat beskrivning nedan
GetChunk datat som sänds från servern Se beskrivningen för execute nedan
GetHeader header data Inet1.getHeader returnera hela headern som sänds av servern. Man kan även ange vilken header man är intresserad av. Se nedan...
OpenURL datat som returneras Används för att direkt hämta datat. Kan vara en dålig idé. Se nedan

Events:

Event När sker den Användning
StateChanged När någontin har hänt i överföringen Används tillsammans med Execute metoden.
     
Syntax: Inet1_StateChanged(ByVal State As Integer)
Möjliga värden på State parametern
Konstant Värde När?
icNone 0 Inget att rapportera
icHostResolvingHost 1 Kontrollen slår upp IP adressen för en URL. Observera att detta bara behöver ske en gång. Laddar ni ner samma sida många gånger efter varandra sker detta bara första gången
icHostResolved 2 Kontrollen har fåttIP adressen för URL:n
icConnecting 3 Kontrollen kontaktar server datorn...
icConnected 4 ... och har fått kontakt
icRequesting 5 En förfrågan sker till servern...
icRequestSent 6 ...och har lyckats sända denna.
icReceivingResponse 7 Kontrollen får data från servern. Observera att detta inte behöver vara det data som frågats efter, utad netta kan t.ex vara en cookie.
icResponseReceived 8 Har fått ovsntående data.
icDisconnecting 9 Kontrollen börjar bryta förbindelsen...
icDisconnected 10 ...och är här färdig med detta.
icError 11 Hups! Någonting har gått snett. Använd ResponseCode och ResponseInfo för att få veta vad.
icResponseCompleted 12 Nu har vi fått allt vi frågade efter.

 

I praktiken HTTP

För att överföra data över Internet med hjälp av Inet kontrollen så används antingen OpenURL eller Execute. Den enklaste (men kanske inte alltid bästa) metoden är OpenURL som fungerar som följer:

Metod: OpenUrl
Syntax: returvariabel = Inet1.OpenUrl( url [,datatyp] )
och datatyp kan vara något av följande:
icString (0 - default): OpenURL returnerar en text. Tex. en html fil eller en textfil
icByteArray (1): OpenURL returnerar binär tdata, t.ex en exe, eller gif fil.

Om vi är säkra på att det är en textfil kan vi använda Inet kontrollen på följande sätt:

Private Sub Command1_Click()
      Dim Resultat As Variant
      Resultat = Inet1.OpenURL("http://www.site.com/fil.htm")
      ' och sen så gör vi någonting av innehållet i
      ' resultat variabeln
      ' för exemplets skull sparar jag i en fil
      Open "C:\Temp\test.txt" For Output As #1
      Print #1 , Resultat
      Close #1
End Sub

Och om vi är säkra på att datat är binärt (exe, zip jpeg eller liknande) kan vi även göra på detta sätt:

Private Sub Command1_Click()
      Dim resultat() As Byte ' observera att vi måste använda en array
      Resultat() = Inet1.OpenURL("http://www.site.com/test.zip", _
                  icByteArray)
      ' och sen så gör vi någonting av innehållet i
      ' resultat variabeln
      ' för exemplets skull sparar jag i en fil
      Open "C:\Temp\test.zip" For Binary Access Write As #1
      Put #1, , Resultat()
      Close #1
End Sub

Problemet med OpenURL är att vi bara sparkar igång en nedladdnin och har ingen koll på vad som sker. Vi har inte heller någon möjlighet att kontrollera typen av data i förväg. Vi har inte heller någon möjlighet att utföra någonting annat än en simpel "download"...

 

Private Sub Command1_Click()
      If Inet1.StillExecuting Then
            Inet1.Cancel
      End If
      Inet1.URL = Text1.Text
      Inet1.Execute Inet1.URL, "GET"
      Do While Inet1.StillExecuting
            DoEvents
      Loop
End Sub


Private Sub Inet1_StateChanged(ByVal State As Integer)
      Dim theResponseType As String
      Dim strData As String
      Dim vtData As Variant
      Dim vtDataTmp As Variant
      Dim byteData() As Byte
      Dim saveFile As String

      Select Case State
            ' allt data finns tillgängligt
            Case icResponseCompleted
                  ' vad har vi fått för typ av fil?
                   theResponseType = Inet1.GetHeader("Content-type")

                  ' kolla filnamnet
                  saveFile = ReverseSpanExcluding(Inet1.Document, "/")

                  ' om man inte anger filnamn utan para katalog får man en default fil
                  ' i så fall är inte Inet1.Document satt utan vi måste kolla
                  '                   If Len(saveFile) = 0 Then
                        saveFile = ReverseSpanExcluding( _
                                           Inet1.GetHeader("Content-location"), "/")
                  End If

                  Select Case theResponseType
                        '                          Case "text/plain", "text/html"
                              vtData = Inet1.GetChunk(1024, icString)
                              Do While LenB(vtData) > 0
                                    strData = strData & vtData
                                    vtData = Inet1.GetChunk(1024, icString)
                              Loop
                              ' gör något med datat. I detta fall en lagring
                              Open "C:\" & saveFile For Output As #1
                              Print #1, strData
                              Close #1
                        Case Else
                              ' binärt data ?
                              vtData = Inet1.GetChunk(1024, icByteArray)
                              Do While LenB(vtData) > 0
                                    vtDataTmp = vtDataTmp & vtData
                                    vtData = Inet1.GetChunk(1024, icByteArray)
                              Loop
                              byteData = vtDataTmp
                              Open "C:\" & saveFile For Binary Access Write As #1
                              Put #1, , byteData
                              Close #1
                   End Select
             Case Else
                        ' här borde väl minst icError (11) kollas
      End Select
End Sub

' några stödfunktioner...
Function ReverseSpanExcluding(S, sSök)
      S = Reverse(S)
      If Len(S) = 0 Then
            ReverseSpanExcluding = Empty
      Else
            ReverseSpanExcluding = Reverse(Left$(S, InStr(1, S, sSök) - 1))
      End If
End Function

Function Reverse(ByVal sSträng)
      Dim sRev As String
      Dim iVarv As Integer
      sRev = ""
      For iVarv = Len(sSträng) To 1 Step -1
            sRev = sRev + Mid(sSträng, iVarv, 1)
      Next iVarv
      Reverse = sRev
End Function

Vill ni veta mer kan ni till exempel söka fram artikel Q229666 i Microsofts Knowledge Base.

Följande Internet artiklar kan vara skäl att läsa:
http://www.microsoft.com/mind/0396/wininet/wininet.htm
http://msdn.microsoft.com/library/periodic/period98/ivb0698.htm

  NätverkWinsock (Microsoft Winsock Control)
Nätverk
Inet (Microsoft Internet Transfer Control)
Winsock (Microsoft Winsock Control)
Vill du veta mera?


Top
< Nätverk Winsock (Microsoft Winsock Control)>
© Anders Enges, Vörå 2002  | 22.01.01 17:43 Visa asp koden