|
Připojení k serveru
Toto je část kódu, kterou naleznete na události Click tlačítka "Načíst zdroj":
If chkUseProxy.Value Then
If Len(txtProxyPort) > 0 And Len(txtProxyServer) > 0 Then
m_strRemoteHost = txtProxyServer
intPort = CInt(txtProxyPort)
m_strFilePath = XURLEncode(txtURL)
If Not Left(m_strFilePath, 7) = "http://" Then
m_strFilePath = "http://" & m_strFilePath
End If
If Left(txtURL, 7) = "http://" Then
strURL = Mid(txtURL, 8)
Else
strURL = txtURL
End If
m_strProxyHost = Left$(strURL, InStr(1, strURL, "/") - 1)
End If
Else
intPort = 80
If Left(txtURL, 7) = "http://" Then
strURL = Mid(txtURL, 8)
Else
strURL = txtURL
End If
m_strRemoteHost = Left$(strURL, InStr(1, strURL, "/") - 1)
m_strFilePath = Mid$(strURL, InStr(1, strURL, "/"))
End If
Právě zde probíhá větvení, které připravuje proměnné pro vygenerování HTTP požadavku. Záleží na tom, zda jedeme přes Proxy Server anebo ne. Hlavní rozdíl je v tom, že pokud se připojujeme přes Proxy Server, musím si ještě navíc zjistit i cílový server z URL adresy
požadovaného zdroje. Nyní se můžeme připojit k serveru: With wscHttp
.Close
.LocalPort = 0
.Connect m_strRemoteHost, intPort
End With
Všimněte si, že pokud jsem připojen přes Proxy Server, tak jako server pro připojení udávám právě adresu Proxy Serveru a jeho port. Při přímém připojení k Internetu zasíláme rovnou adresu a defaultní port cílového serveru.
Pokud se úspěšně připojíme na server (ať již přímo na cílový nebo na Proxy Server, je vyvolána událost Connect prvku WinSock. Zde vygenerujeme HTTP požadavek a předáme:
Dim strHttpRequest As String
strHttpRequest = "GET " & XURLEncode(m_strFilePath) & " HTTP/1.1" & vbCrLf
strHttpRequest = strHttpRequest & "Connection: close" & vbCrLf
strHttpRequest = strHttpRequest & "Accept: */*" & vbCrLf
If Len(txtUserName.Text) > 0 And Len(txtPassword.Text) > 0 Then
strHttpRequest = strHttpRequest & "Authorization: Basic "
strHttpRequest = strHttpRequest & CStr(Base64_Encode(txtUserName.Text & ":" & txtPassword.Text)) & vbCrLf
End If
If Len(txtProxyUserName.Text) > 0 And Len(txtProxyPassword.Text) > 0 Then
strHttpRequest = strHttpRequest & "Host: " & m_strProxyHost & vbCrLf
strHttpRequest = strHttpRequest & "Proxy-Authorization: Basic "
strHttpRequest = strHttpRequest & Base64_Encode(txtProxyUserName.Text & ":" & _
txtProxyPassword.Text) & vbCrLf
Else
strHttpRequest = strHttpRequest & "Host: " & m_strRemoteHost & vbCrLf
End If
strHttpRequest = strHttpRequest & vbCrLf
wscHttp.SendData strHttpRequest Hned na začátku používám funkci XURLEncode. není to skutečné URL enkódování znaků, ale jenom nahrazuji mezery v řetězci za znak %20 (funkce je
součástí projektu). Pak následuje generování řádek HTTP požadavku společné pro všechny případy připojení. A následně se kód větví podle toho, zda je cílový soubor chráněný jménem a heslem a zda jsem připojeni přes Proxy Server. Nejsou tu implementovány žádné složité procedury
pro ověřování chyb (správnosti zadání údajů do polí), je to pouze demonstrační projekt a Vy si, pokud jej budete používat, jistě napíšete svoje a lepší :) Takto vygenerovaný HTTP požadavek se zobrazí v
příslušném RichTextBoxu a my můžeme čekat na odpověď. 
|