Older Version
Newer Version
Alyce
Jun 12, 2011
Retrieving HTTPS Data
by Brent Thorn -Originally in Liberty BASIC Newsletter #37
This demo reads a remote file into memory. Hopefully Yahoo doesn't mind my choice of URLs. Please note the strange hanging behavior at the "Close #inet" statement.
After doing a little testing, I found my hanging was the result of some ad-blocking software I have installed. When I disabled it the hanging ceased. It may be rare but you may want to keep this possibility in mind when using my code in your own programs. I can only suggest not closing #inet until after all your windows are closed at exit to avoid any possibility of a user's thinking your app is faulty.
Demo
'CODE BEGINS
'Retrieving HTTPS Data Demo
'By Brent D. Thorn, 9/2005
remoteFile$ = "https://login.yahoo.com/"
CHUNK.SIZE = 512 ' enough bytes to hold a single line of HTML
Open "wininet" For DLL As #inet
'It would be a good idea to test for an Internet
'connection before proceding. This demo assumes
'you have one already.
' Register a new user agent. Use proxy settings
' set up in Internet Options Control Panel.
CallDLL #inet, "InternetOpenA", _
"My User Agent" As Ptr, _
0 As Long, _ 'INTERNET_OPEN_TYPE_PRECONFIG
_NULL As Long, _
_NULL As Long, _
0 As ULong, _
hInet As ULong
If hInet = 0 Then [ErrExit]
' Open a request to a remote file
CallDLL #inet, "InternetOpenUrlA", _
hInet As ULong, _
remoteFile$ As Ptr, _
_NULL As Long, _
0 As Long, _
2147483648 As ULong, _ 'INTERNET_FLAG_RELOAD
_NULL As Long, _
hFile As ULong
If hFile = 0 Then [ErrExit]
' Start reading in the file by chunks.
Buffer$ = ""
chunk$ = Space$(CHUNK.SIZE)+Chr$(0)
Struct pdw, NumberOfBytesRead As ULong
Do
CallDLL #inet, "InternetReadFile", _
hFile As ULong, _
chunk$ As Ptr, _
CHUNK.SIZE As ULong, _
pdw As Struct, _
ret As Long
If pdw.NumberOfBytesRead.struct = 0 Then Exit Do
Buffer$ = Buffer$ + Left$(chunk$, pdw.NumberOfBytesRead.struct)
Loop Until 0
Print Buffer$
[ErrExit]
' If you get an error, find GetLastError on MSDN. There
' you will find a link to a list of error codes.
CallDLL #kernel32, "GetLastError", ret As ULong
If ret Then Print "Error ";ret
' Free the handles we created and exit.
If hFile Then _
CallDLL #inet, "InternetCloseHandle", _
hFile As ULong, ret As Long
If hInet Then _
CallDLL #inet, "InternetCloseHandle", _
hInet As ULong, ret As Long
' Strangely, the next line causes LB to hang for around 45
' seconds on my computer, a 2.2 GHz running XP on dial-up.
Close #inet
End
'CODE ENDS