|
-
Nov 30th, 2007, 04:39 PM
#1
Thread Starter
Frenzied Member
Timeout for wininet
Hi, I'm using the code below to download a very small text file from a server (maximum size of 500 bytes) into a string, because I rather not add the Inet control for something as simple as this.
If there are server problems the application hangs. The Inet control has "RequestTimeout" to set a timeout. If the data hasn't been downloaded within a certain time it shows an error that can be trapped.
Is it possible to set a timeout with wininet?
vb Code:
Option Explicit
Private 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
Private 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
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Declare Function DeleteUrlCacheEntry Lib "wininet.dll" (ByVal lpszUrlName As String) As Long
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
DeleteUrlCacheEntry sURL
'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
Last edited by Chris001; Nov 30th, 2007 at 04:48 PM.
-
Dec 18th, 2007, 02:12 PM
#2
Lively Member
Re: Timeout for wininet
Sure, you can use WinHTTP .
Make sure to Reference "Microsoft WinHTTP Services" in your app.
Code:
Dim oRequest As WinHttp.WinHttpRequest
Set oRequest = New WinHttp.WinHttpRequest
oRequest.SetTimeouts lngResolveTimeout, lngConnTimeOut, lngSendTimeout, lngReceiveTimeout
oRequest.Open "GET", "http://servername/filename.html"
oRequest.Send
GetUrlSource = oRequest.ResponseText
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|