• Welcome to Powerbasic Museum 2020-B.
 

News:

Forum in repository mode. No new members allowed.

Main Menu

WININET Examples

Started by José Roca, August 29, 2011, 01:43:42 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

José Roca

 
The Windows Internet (WinINet) application programming interface (API) enables applications to interact with FTP, and HTTP protocols to access Internet resources. As standards evolve, these functions handle the changes in underlying protocols, enabling them to maintain consistent behavior.

With a few exceptions, WinINet is a superset of WinHTTP. When selecting between the two, you should use WinINet, unless you plan to run within a service or service-like process that requires impersonation and session isolation.

José Roca

 
The following code attempts to make a connection to the Internet.


#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   IF InternetAttemptConnect(0) = %ERROR_SUCCESS THEN
      ? "You can connect to the Internet"
   ELSE
      ? "You cannot connect to the Internet"
   END IF

   #IF %DEF(%PB_CC32)
      WAITKEY$
   #ENDIF

END FUNCTION


José Roca

 
The following code checks if a connection to the Internet can be established.


#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   IF InternetCheckConnection("http://www.jose.it-berater.org", _
      %FLAG_ICC_FORCE_CONNECTION, 0) = %ERROR_SUCCESS THEN
      ? "Connection failed!"
   ELSE
      ? "Connection succeeded!"
   END IF

   #IF %DEF(%PB_CC32)
      WAITKEY$
   #ENDIF

END FUNCTION


José Roca

 
Combines a base and relative URL into a single URL.


#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   LOCAL szUrl AS ASCIIZ * %INTERNET_MAX_PATH_LENGTH
   
   InternetCombineUrl "http://www.powerbasic.com", "/support/forums/Ultimate.cgi" , _
                      szUrl, SIZEOF(szUrl), %ICU_ENCODE_PERCENT

   ? szUrl

   #IF %DEF(%PB_CC32)
      WAITKEY$
   #ENDIF

END FUNCTION


José Roca

 
The following example canonicalizes the specified url.


#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   LOCAL szUrl AS ASCIIZ * %INTERNET_MAX_PATH_LENGTH
   LOCAL szBuffer AS ASCIIZ * %INTERNET_MAX_PATH_LENGTH

   szUrl = "http://msdn2.microsoft.com/en-us/ library/"
   InternetCanonicalizeUrl szUrl, szBuffer, SIZEOF(szBuffer), %ICU_BROWSER_MODE
   ? szBuffer

   #IF %DEF(%PB_CC32)
      WAITKEY$
   #ENDIF

END FUNCTION


José Roca

 
The following code cracks a URL into its component parts.


' SED_PBCC - Use the PBCC compiler
#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   LOCAL uc AS URL_COMPONENTS
   LOCAL szUrl AS ASCIIZ * %INTERNET_MAX_PATH_LENGTH
   LOCAL szDomain AS ASCIIZ * 256
   LOCAL szPath AS ASCIIZ * %INTERNET_MAX_PATH_LENGTH
   LOCAL szExtra AS ASCIIZ * 256

   uc.dwStructSize      = SIZEOF(uc)
   uc.lpszScheme        = %NULL
   uc.dwSchemeLength    = %NULL
   uc.lpszHostName      = VARPTR(szDomain)
   uc.dwHostNameLength  = SIZEOF(szDomain)
   uc.lpszUserName      = %NULL
   uc.dwUserNameLength  = %NULL
   uc.lpszPassword      = %NULL
   uc.dwPasswordLength  = %NULL
   uc.lpszUrlPath       = VARPTR(szPath)
   uc.dwUrlPathLength   = SIZEOF(szPath)
   uc.lpszExtraInfo     = VARPTR(szExtra)
   uc.dwExtraInfoLength = SIZEOF(szExtra)

   szUrl = "http://msdn2.microsoft.com/en-us/library/aa384376.aspx"
   InternetCrackUrl szUrl, SIZEOF(szUrl), %ICU_ESCAPE, uc

   PRINT "Host name: " uc.@lpszHostName
   PRINT "Path: " uc.@lpszUrlPath
   PRINT "Port number: " uc.nPort

   WAITKEY$

END FUNCTION


José Roca

 
The following code retrieves the connected state.


#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   LOCAL dwFlags AS DWORD

   IF ISTRUE InternetGetConnectedState(dwFlags, 0) THEN
      ? "Connected"
   ELSE
      ? "Disconnected"
   END IF

   #IF %DEF(%PB_CC32)
      WAITKEY$
   #ENDIF

END FUNCTION


The following code retrieves the connected state and displays the connection description.


' SED_PBCC - Use the PBCC compiler
#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   LOCAL dwFlags AS DWORD

   IF ISTRUE InternetGetConnectedState(dwFlags, 0) THEN
      PRINT "Connected"
   ELSE
      PRINT "Disconnected"
   END IF
   
   IF (dwFlags AND %INTERNET_CONNECTION_CONFIGURED) = %INTERNET_CONNECTION_CONFIGURED THEN
      PRINT "Local system has a valid connection to the Internet, but it may or may not be currently connected."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_LAN) = %INTERNET_CONNECTION_LAN THEN
      PRINT "Local system uses a local area network to connect to the Internet."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_MODEM) = %INTERNET_CONNECTION_MODEM THEN
      PRINT "Local system uses a modem to connect to the Internet."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_OFFLINE) = %INTERNET_CONNECTION_OFFLINE THEN
      PRINT "Local system is in offline mode."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_PROXY) = %INTERNET_CONNECTION_PROXY THEN
      PRINT "Local system uses a proxy server to connect to the Internet."
   END IF

   IF (dwFlags AND %INTERNET_RAS_INSTALLED) = %INTERNET_RAS_INSTALLED THEN
      PRINT "Local system has RAS installed."
   END IF

   WAITKEY$

END FUNCTION


José Roca

 
The following code retrieves the connected state and the connection name.


' SED_PBCC - Use the PBCC compiler
#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   LOCAL dwFlags AS DWORD
   LOCAL szConnectionName AS ASCIIZ * 256

   IF ISTRUE InternetGetConnectedStateEx(dwFlags, szConnectionName, SIZEOF(szConnectionName), 0) THEN
      PRINT "Connected"
      PRINT "Connection name: " szConnectionName
   ELSE
      PRINT "Disconnected"
   END IF
   
   IF (dwFlags AND %INTERNET_CONNECTION_CONFIGURED) = %INTERNET_CONNECTION_CONFIGURED THEN
      PRINT "Local system has a valid connection to the Internet, but it may or may not be currently connected."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_LAN) = %INTERNET_CONNECTION_LAN THEN
      PRINT "Local system uses a local area network to connect to the Internet."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_MODEM) = %INTERNET_CONNECTION_MODEM THEN
      PRINT "Local system uses a modem to connect to the Internet."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_OFFLINE) = %INTERNET_CONNECTION_OFFLINE THEN
      PRINT "Local system is in offline mode."
   END IF

   IF (dwFlags AND %INTERNET_CONNECTION_PROXY) = %INTERNET_CONNECTION_PROXY THEN
      PRINT "Local system uses a proxy server to connect to the Internet."
   END IF

   IF (dwFlags AND %INTERNET_RAS_INSTALLED) = %INTERNET_RAS_INSTALLED THEN
      PRINT "Local system has RAS installed."
   END IF

   WAITKEY$

END FUNCTION


José Roca

 
The following code retrieves the cookie for the specified URL.


#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

FUNCTION PBMAIN () AS LONG

   LOCAL hr AS LONG
   LOCAL dwSize AS DWORD
   LOCAL strCookieData AS STRING
     
   hr = InternetGetCookie("http://www.powerbasic.com/", "", BYVAL %NULL, dwSize)
   IF ISTRUE hr THEN
      strCookieData = SPACE$(dwSize)
      hr = InternetGetCookie("http://www.powerbasic.com/", "", BYVAL STRPTR(strCookieData), dwSize)
      ? strCookieData
   END IF
   
   #IF %DEF(%PB_CC32)
      WAITKEY$
   #ENDIF

END FUNCTION


José Roca

 
The following code connects with a web page and retrieves its html text.


' ########################################################################################
' The following example illustrates the use of the InternetOpen function.
' ########################################################################################

#COMPILE EXE
#DIM ALL
#INCLUDE "WININET.INC"

' ========================================================================================
' Main
' ========================================================================================
FUNCTION PBMAIN () AS LONG

   LOCAL bResult AS LONG
   LOCAL hSession AS DWORD
   LOCAL hInternet AS DWORD
   LOCAL szUrl AS ASCIIZ * %INTERNET_MAX_PATH_LENGTH
   LOCAL strBuffer AS STRING
   LOCAL strData AS STRING
   LOCAL cbBytesRead AS DWORD

   ' Initializes an application's use of the WinINet functions.
   hSession = InternetOpen("Test", %INTERNET_OPEN_TYPE_DIRECT, "", "", 0)
   IF hSession = %NULL THEN
      ? "InternetOpen error:" & STR$(GetLastError)
      #IF %DEF(%PB_CC32)
         WAITKEY$
      #ENDIF
      EXIT FUNCTION
   END IF

   ' Opens a resource specified by a complete HTTP URL.
   szUrl = "http://www.powerbasic.com/"
   hInternet = InternetOpenUrl(hSession, szUrl, "", 0, %INTERNET_FLAG_NO_CACHE_WRITE, 0)
   IF hInternet = %NULL THEN
      ? "InternetOpenUrl error:" & STR$(GetLastError)
      InternetCloseHandle hSession
      #IF %DEF(%PB_CC32)
         WAITKEY$
      #ENDIF
      EXIT FUNCTION
   END IF

   ' Reads the data in 1024 bytes chunks
   strBuffer = SPACE$(1024)
   DO
      bResult = InternetReadFile(hInternet, STRPTR(strBuffer), LEN(strBuffer), cbBytesRead)
      IF bResult = 0 OR cbBytesRead = 0 THEN EXIT DO
      IF cbBytesRead = LEN(strBuffer) THEN
         strData = strData & strBuffer
      ELSE
         strData = strData & LEFT$(strBuffer, cbBytesRead)
      END IF
   LOOP

   ' Closes handles
   InternetCloseHandle hInternet
   InternetCloseHandle hSession

   ' Displays the retrieved data
   ? strData

   #IF %DEF(%PB_CC32)
      WAITKEY$
   #ENDIF

END FUNCTION
' ========================================================================================