Tipp 052: URL in einzelne Bestandteile zerlegen [splitten]
Autor: Alexander Kopatz VB-Version: Visual Basic 6.0 Download: Beispielprojekt Tipp-052
Beschreibung
Die Abkürzung URL steht für Uniform Resource Locator, was so viel bedeutet wie einheitlicher Quellenanzeiger. Per URL lassen sich auf standardisierte Art und Weise Dokumente und Webseiten im Internet beschreiben und identifizieren. Hierbei kann die Erscheinungsform einer URL auf den ersten Blick sehr unterschiedlich anmuten, etwa:
http://visualbasicworld.de
verglichen mit:
http://www.visualbasicworld.de/download/tipps-und-tricks/vbw-tipp-052.zip
Beide Angaben beschreiben gültige Internetadressen. Dies macht die Programmierung bisweilen kompliziert, wenn ein Programm verschiedentliche Angaben gleichartig verarbeiten soll. Hilfreich ist hier ein Blick auf die Struktur eines Uniform Resource Locator, dieser ist - wie der Name schon sagt - immer gleich:
http://peter:vertraulich@visualbasicworld.de:80/pfad1/datei.cgi?sprache=de&kategorie=vb#anfang
| | | | | | | |
| | | Host | Pfad Query Fragment
| | Passwort Port
| Benutzer
Protokoll
Einige der Angeben sind jedoch Optional. So muss nicht jede URL einen Benutzer oder ein Passwort enthalten. In der Praxis ist es daher hilfreich eine URL in Ihre einzelnen Bestandteile zu zerlegen und sodann mit diesen einzeln weiter zu verfahren. Der nächstliegende Gedanke wäre es nun freilich eine händische Implementierung umzusetzen, dies ist meist jedoch nicht erforderlich. So stellt uns dankenswerterweise die
wininet.dll die Funktion
InternetCrackUrl zur Verfügung. Diese erledigt die Gewünschte Aufgabe und verwandelt unsere sperrige Internetadresse in handliche Stückchen, welche Sich gut einheitlich weiterverarbeiten lassen. Dieser Tipp zeigt die genaue Verwendung.
Hinweis: Es sei jedoch angemerkt, dass die InternetCrackUrl-Funktion nicht zu jeder noch so komplizierten URL immer die ideale Antwort parat hat. Dies gilt insbesondere dann, wenn die eingehenden URLs nicht durchgängig standardkonform formatiert sind. Dies kann etwa beim Aufgreifen der Dateinamen mittels Webcrawler der Fall sein. Hier empfiehlt sich die Ergänzung einer selbstgeschriebene Implementierung die auch mit unvorhersehbaren Ungereimtheiten umzugehen vermag.
Quellcode
frmURLSplit
CommandButton cmdSplit
Form frmURLSplit
Frame fraBorder
Frame fraURLToSplit
Label Label1
Label Label2
Label Label3
Label Label4
Label Label5
Label lblDatei
Label lblExtraInfo
Label lblHostName
Label lblSektion
Label lblURL
' VISUAL BASIC WORLD
' ===========================================
' Das große Portal zum Thema Visual Basic.
'
' Wenn Ihnen dieser Source Code gefallen hat,
' dann empfehlen Sie Visual Basic World bitte
' weiter und/oder setzen Sie einen Link auf:
'
' http://www.visualbasicworld.de/
'
' Vernetzen Sie sich mit uns:
'
' http://twitter.com/visualbasicwrld
Option Explicit
Private Declare Function InternetCrackUrl Lib "wininet.dll" Alias _
"InternetCrackUrlA" (ByVal lpszUrl As String, ByVal dwUrlLength As Long, _
ByVal dwFlags As Long, lpUrlComponents As URL_COMPONENTS) As Long
Private Type URL_COMPONENTS
dwStructSize As Long
lpszScheme As String
dwSchemeLength As Long
nScheme As Long
lpszHostName As String
dwHostNameLength As Long
nPort As Long
lpszUserName As String
dwUserNameLength As Long
lpszPassword As String
dwPasswordLength As Long
lpszUrlPath As String
dwUrlPathLength As Long
lpszExtraInfo As String
dwExtraInfoLength As Long
End Type
Private lngPort As Long
Private strHostName As String
Private strUrlPath As String
Private strExtraInfo As String
Private strSektion As String
Private strDatei As String
Public Sub SplitURL(ByVal strInternetURL As String)
Dim lngRetVal As Long
Dim lngZähler As Long
Dim URL As URL_COMPONENTS
strHostName = Space$(1024)
strUrlPath = Space$(1024)
strExtraInfo = Space$(1024)
'Die Variablen werden mit Leerraum initalisiert.
With URL
.dwStructSize = Len(URL)
.nScheme = 3
.lpszHostName = strHostName
.dwHostNameLength = Len(strHostName)
.nPort = lngPort
.lpszUrlPath = strUrlPath
.dwUrlPathLength = Len(strUrlPath)
.lpszExtraInfo = strExtraInfo
.dwExtraInfoLength = Len(strExtraInfo)
End With
lngRetVal = InternetCrackUrl(strInternetURL, Len(strInternetURL), 0&, URL)
'Die Funktion splittet die angegebene URL in ihre Bestandteile auf.
With URL
If lngRetVal <> 0 Then
strHostName = Left$(.lpszHostName, .dwHostNameLength)
strUrlPath = Left$(.lpszUrlPath, .dwUrlPathLength)
strExtraInfo = Left$(.lpszExtraInfo, .dwExtraInfoLength)
lngPort = .nPort
For lngZähler = Len(strUrlPath) To 1 Step -1
If Mid(strUrlPath, lngZähler, 1) = "/" Then
strSektion = Left(strUrlPath, lngZähler)
strDatei = Mid(strUrlPath, lngZähler + 1)
Exit For
End If
Next
Else
strHostName = ""
End If
End With
End Sub
Private Sub cmdSplit_Click()
SplitURL txtURL.Text
lblURL.Caption = txtURL.Text
lblHostName.Caption = strHostName
lblSektion.Caption = strSektion
lblDatei.Caption = strDatei
lblExtraInfo = strExtraInfo
End Sub