Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tietty pätkä tiedostoa netistä

Jorgga [07.09.2007 17:13:40]

#

Haluaisin nettisivulta joka on jotakuinkin 66 kilotavua (eli lataaminen kestää suht kauan ja siksi aikaa ohjelma jäätyy, eli noin 1-3 sekunniksi) mutta tarvitsisin vain noin 5kt tavaraa kyseiseltä sivulta eli jotakuinkin 45000:nestä merkistä 50000:neen merkkiin mutta en keksi miten... Käytän nyt moduulia

Option Explicit
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

Public Const IF_FROM_CACHE = &H1000000
Public Const IF_MAKE_PERSISTENT = &H2000000
Public Const IF_NO_CACHE_WRITE = &H4000000

Private Const BUFFER_LEN = 256


Public Function GetUrlSource(sURL As String) As String
    Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
    Dim hInternet As Long, hSession As Long, lReturn As Long

    'get the handle of the current internet connection
    hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
    'get the handle of the url
    If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
    'if we have the handle, then start reading the web page
    If hInternet Then
        'get the first chunk & buffer it.
        iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
        sData = sBuffer
        'if there's more data then keep reading it into the buffer
        Do While lReturn <> 0
            iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
            sData = sData + Mid(sBuffer, 1, lReturn)
        Loop

    End If

    'close the URL
    iResult = InternetCloseHandle(hInternet)

    GetUrlSource = sData
End Function

mutta myös jos joku saisi tuosta: https://www.ohjelmointiputka.net/koodivinkit/24126-vb6-tiedoston-haku-netistä-winsockilla sovellettua niin ihan hyvä olisi

Itellä lyö tyhjää... -___-'

Blaze [07.09.2007 18:15:18]

#

HTTP-protokollasta löytyy Range-headeri, jonka avulla voi pyytää vain osaa tiedostosta.
En keksi, miten tuon pulttais tuohon antamaas koodiin, mutta tuohon soodan vinkkiin onnistuu:
Lisää siihen FilePyyntö-muuttujaan vielä "Range: bytes=45000-50000", niin vastauksena pitäis tulla vaan nuo 5kt siitä välistä.

Jorgga [07.09.2007 19:24:56]

#

Mihinkäs väliin tuo pitäisi laittaa?

FilePyyntö = "GET " & Tiedosto & " HTTP/1.1" & vbCrLf & _
                 "Host: " & HostiName & vbCrLf & _
                 "Range: bytes=45000-50000" & vbCrLf & _
                 "Connection: close" & vbCrLf & _
                 "Accept: */*" & vbCrLf & _
                 vbCrLf

Tämä ei toiminut :/

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta