Announcement

Collapse
No announcement yet.

WINHTTP Flat API Examples

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • WINHTTP Flat API Examples

    Microsoft Windows HTTP Services (WinHTTP) provides developers with a server-supported, high-level interface to the HTTP/1.1 Internet protocol. WinHTTP is designed to be used primarily in server-based scenarios by server applications that communicate with HTTP servers.

    WinINet was designed as an HTTP client platform for interactive desktop applications, such as Microsoft Internet Explorer, Microsoft Office, and Microsoft Money. WinINet displays a user interface for some operations such as collecting user credentials. WinHTTP, however, handles these operations programmatically. Server applications that require HTTP client services should use WinHTTP instead of WinINet. For more information, see Porting WinINet Applications to WinHTTP.

    WinHTTP is also designed for use in system services and HTTP-based client applications. However, single-user applications that require FTP protocol functionality, cookie persistence, caching, automatic credential dialog handling, Internet Explorer compatibility, or downlevel platform support should consider using WinINet.

    This interface is accessible from C/C++ by using either the WinHTTP application programming interface (API), or by using the IWinHttpRequest and IWinHttpRequestEvents interfaces. WinHTTP is also accessible from script and Microsoft Visual Basic through the WinHTTP object. For more information and descriptions of the individual functions, see the WinHTTP functions reference for the specific language.

    Caution WinHTTP is not reentrant except during asynchronous completion callback. That is, while a thread has a call pending to one of the WinHTTP functions such as WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpSendData, or WinHttpWriteData, it must never call WinHTTP a second time until the first call has completed. One scenario under which a second call could occur is as follows: If an application queues an Asynchronous Procedure Call (APC) to the thread that calls into WinHTTP, and if WinHTTP performs an alertable wait internally, the APC can run. If the APC routine happens also to call WinHTTP, it reenters the WinHTTP API, and the internal state of WinHTTP can be corrupted.
    WinHTTP 5.1 Features

    The following features have been added in version 5.1 of WinHTTP:
    • IPv6 support.
    • AutoProxy capabilities.
    • HTTP/1.0 protocol, including support for keep-alive (persistent) connections and session cookies.
    • HTTP/1.1 chunked transfer support for HTTP responses.
    • Keep-alive pooling of anonymous connections across sessions.
    • Secure Sockets Layer (SSL) functionality, including client certificates. Supported SSL protocols include the following: SSL 2.0, SSL 3.0, and Transport Layer Security (TLS) 1.0.
    • Support for server and proxy authentication, including integrated support for Microsoft Passport 1.4 and the Negotiate/ Kerberos package.
    • Automatic handling of redirects unless suppressed.
    • Scriptable interface in addition to the API.
    • Trace utility to help troubleshoot problems.


    A number of WinINet features are not supported in WinHTTP, including URL caching and persistent cookies, autoproxy, autodialing, offline support, and File Transfer Protocol (FTP).
    Forum: http://www.jose.it-berater.org/smfforum/index.php

  • #2
    WinHttpAddRequestHeaders Function

    The following code example includes an If-Modified-Since header in a request. The response header is interpreted to determine whether the target document has been updated.

    Code:
    ' ========================================================================================
    ' The following example shows how to obtain an HINTERNET handle, open an HTTP session,
    ' create and send a request header, and examine the returned response header.
    ' ========================================================================================
    
    ' CSED_PBCC - Use the console compiler
    #COMPILE EXE
    #DIM ALL
    #INCLUDE ONCE "windows.inc"
    #INCLUDE ONCE "winhttp.inc"
    
    ' ========================================================================================
    ' Main
    ' ========================================================================================
    FUNCTION PBMAIN () AS LONG
    
       LOCAL dwSize AS DWORD
       LOCAL dwStatusCode AS DWORD
       LOCAL bResults AS LONG
       LOCAL hSession AS DWORD
       LOCAL hConnect AS DWORD
       LOCAL hRequest AS DWORD
       LOCAL wszUserAgent AS WSTRINGZ * 260
       LOCAL wszServerName AS WSTRINGZ * 260
       LOCAL wszVerb AS WSTRINGZ * 260
       LOCAL wszHeaders AS WSTRINGZ * 260
    
       dwSize = 4  ' size of a DWORD
    
       ' Use WinHttpOpen to obtain a session handle.
       wszUserAgent = "A WinHTTP Example Program/1.0"
       hSession = WinHttpOpen(wszUserAgent, _
                              %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                              BYVAL %WINHTTP_NO_PROXY_NAME, _
                              BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                              0)
    
       ' Specify an HTTP server.
       IF hSession THEN
          wszServerName = "www.microsoft.com" & $NUL
          hConnect = WinHttpConnect(hSession, _
                                    wszServerName, _
                                    %INTERNET_DEFAULT_HTTP_PORT, _
                                    0)
       END IF
    
       ' Create an HTTP Request handle.
       IF hConnect THEN
          wszVerb = "GET"
          hRequest = WinHttpOpenRequest(hConnect, _
                                        wszVerb, _
                                        "",  _
                                        "", _
                                        BYVAL %WINHTTP_NO_REFERER, _
                                        BYVAL %WINHTTP_DEFAULT_ACCEPT_TYPES, _
                                        0)
       END IF
    
       ' Add a request header.
       IF hRequest THEN
          wszHeaders = "If-Modified-Since: Mon, 20 Nov 2000 20:00:00 GMT"
          bResults = WinHttpAddRequestHeaders(hRequest, _
                                              wszHeaders, _
                                              -1, _
                                              %WINHTTP_ADDREQ_FLAG_ADD)
       END IF
    
       ' Send a Request.
       IF bResults THEN
          bResults = WinHttpSendRequest(hRequest, _
                                        BYVAL %WINHTTP_NO_ADDITIONAL_HEADERS, _
                                        0, _
                                        %WINHTTP_NO_REQUEST_DATA, _
                                        0, _
                                        0, _
                                        0)
       END IF
    
       ' End the request.
       IF bResults THEN
          bResults = WinHttpReceiveResponse(hRequest, %NULL)
       END IF
    
       ' Use WinHttpQueryHeaders to obtain the header buffer.
       IF bResults THEN
          bResults = WinHttpQueryHeaders(hRequest, _
                                         %WINHTTP_QUERY_STATUS_CODE OR %WINHTTP_QUERY_FLAG_NUMBER, _
                                         "", _
                                         VARPTR(dwStatusCode), _
                                         dwSize, _
                                         %WINHTTP_NO_HEADER_INDEX)
       END IF
    
       ' Based on the status code, determine whether
       ' the document was recently updated.
       IF bResults THEN
          IF dwStatusCode = 304 THEN
             PRINT "Document has not been updated."
          ELSEIF dwStatusCode = 200 THEN
             PRINT "Document has been updated."
          ELSE
             PRINT "Status code =" dwStatusCode
          END IF
       END IF
    
       ' Report any errors.
       IF ISFALSE bResults THEN
          PRINT "Error %d has occurred." GetLastError
       END IF
    
       ' Close open handles.
       IF hRequest THEN WinHttpCloseHandle(hRequest)
       IF hConnect THEN WinHttpCloseHandle(hConnect)
       IF hSession THEN WinHttpCloseHandle(hSession)
    
       WAITKEY$
    
    END FUNCTION
    ' ========================================================================================
    Forum: http://www.jose.it-berater.org/smfforum/index.php

    Comment


    • #3
      WinHttpCheckPlatform Function

      The following example shows how to determine whether the current platform is supported.

      Code:
      ' ========================================================================================
      ' The following example shows how to determine whether the current platform is supported.
      ' ========================================================================================
      
      ' CSED_PBCC - Use the console compiler
      #COMPILE EXE
      #DIM ALL
      #INCLUDE ONCE "windows.inc"
      #INCLUDE ONCE "winhttp.inc"
      
      ' ========================================================================================
      ' Main
      ' ========================================================================================
      FUNCTION PBMAIN () AS LONG
      
         IF WinHttpCheckPlatform THEN
            PRINT "This platform is supported by WinHTTP."
         ELSE
            PRINT "This platform is NOT supported by WinHTTP."
         END IF
      
         WAITKEY$
      
      END FUNCTION
      ' ========================================================================================
      Forum: http://www.jose.it-berater.org/smfforum/index.php

      Comment


      • #4
        WinHttpCloseHandle Function

        The following example shows you how to retrieve the connection time-out value:

        Code:
        ' ========================================================================================
        ' The following example shows you how to retrieve the connection time-out value.
        ' ========================================================================================
        
        ' CSED_PBCC - Use the console compiler
        #COMPILE EXE
        #DIM ALL
        #INCLUDE ONCE "windows.inc"
        #INCLUDE ONCE "winhttp.inc"
        
        ' ========================================================================================
        ' Main
        ' ========================================================================================
        FUNCTION PBMAIN () AS LONG
        
           LOCAL hSession AS DWORD
           LOCAL pData AS DWORD
           LOCAL dwSize AS DWORD
           LOCAL wszUserAgent AS WSTRINGZ * 260
        
           dwSize = 4  ' size of a DWORD
        
           ' Use WinHttpOpen to obtain a session handle.
           wszUserAgent = "A WinHTTP Example Program/1.0"
           hSession = WinHttpOpen(wszUserAgent, _
                                  %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                  BYVAL %WINHTTP_NO_PROXY_NAME, _
                                  BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                  0)
        
           IF hSession THEN
              ' Use WinHttpQueryOption to retrieve internet options.
              IF WinHttpQueryOption(hSession, _
                                    %WINHTTP_OPTION_CONNECT_TIMEOUT, _
                                    VARPTR(pdata), _
                                    dwSize) THEN
                 PRINT "Connection timeout: " pdata
              ELSE
                 PRINT "Error " GetLastError " in WinHttpQueryOption"
              END IF
              ' When finished, release the HINTERNET handle.
              WinHttpCloseHandle(hSession)
           ELSE
              PRINT "Error " GetLastError " in in WinHttpOpen."
           END IF
        
           ' Close open handles.
           IF hSession THEN WinHttpCloseHandle(hSession)
        
           WAITKEY$
        
        END FUNCTION
        ' ========================================================================================
        Forum: http://www.jose.it-berater.org/smfforum/index.php

        Comment


        • #5
          WinHttpConnect Function

          The following example shows how to use secure transaction semantics to download a resource from an HTTPS server. The sample code initializes the Microsoft Windows HTTP Services (WinHTTP) application programming interface (API), selects a target HTTPS server, then opens and sends a request for this secure resource. WinHttpQueryDataAvailable is used with the request handle to determine how much data is available for download, then WinHttpReadData is used to read that data. This process repeats until the entire document has been retrieved and displayed.

          Code:
          ' ========================================================================================
          ' The following example shows how to use secure transaction semantics to download a
          ' resource from an HTTPS server. The sample code initializes the Microsoft Windows HTTP
          ' Services (WinHTTP) application programming interface (API), selects a target HTTPS
          ' server, then opens and sends a request for this secure resource.
          ' WinHttpQueryDataAvailable is used with the request handle to determine how much data is
          ' available for download, then WinHttpReadData is used to read that data. This process
          ' repeats until the entire document has been retrieved and displayed.
          ' ========================================================================================
          
          ' CSED_PBCC - Use the console compiler
          #COMPILE EXE
          #DIM ALL
          #INCLUDE ONCE "windows.inc"
          #INCLUDE ONCE "winhttp.inc"
          
          ' ========================================================================================
          ' Main
          ' ========================================================================================
          FUNCTION PBMAIN () AS LONG
          
             LOCAL dwSize AS DWORD
             LOCAL dwDownloaded AS DWORD
             LOCAL bResults AS LONG
             LOCAL hSession AS DWORD
             LOCAL hConnect AS DWORD
             LOCAL hRequest AS DWORD
             LOCAL wszUserAgent AS WSTRINGZ * 260
             LOCAL wszServerName AS WSTRINGZ * 260
             LOCAL wszVerb AS WSTRINGZ * 260
             LOCAL strOutBuffer AS STRING
          
             dwSize = 4  ' size of a DWORD
          
             ' Use WinHttpOpen to obtain a session handle.
             wszUserAgent = "A WinHTTP Example Program/1.0"
             hSession = WinHttpOpen(wszUserAgent, _
                                    %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                    BYVAL %WINHTTP_NO_PROXY_NAME, _
                                    BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                    0)
          
             ' Specify an HTTP server.
             IF hSession THEN
                wszServerName = "www.microsoft.com"
                hConnect = WinHttpConnect(hSession, _
                                          wszServerName, _
                                          %INTERNET_DEFAULT_HTTP_PORT, _
                                          0)
             END IF
          
          
             ' Create an HTTP Request handle.
             IF hConnect THEN
                wszVerb = "GET"
                hRequest = WinHttpOpenRequest(hConnect, _
                                              wszVerb, _
                                              "",  _
                                              "", _
                                              BYVAL %WINHTTP_NO_REFERER, _
                                              BYVAL %WINHTTP_DEFAULT_ACCEPT_TYPES, _
                                              0)
             END IF
          
             ' Send a Request.
             ' Note: The Microsoft C example uses WINHTTP_FLAG_SECURE for the last
             ' parameter, but I have changed it to 0 because, otherwise, it returns
             ' error 12175 (ERROR_WINHTTP_SECURE_FAILURE)
             IF hRequest THEN
                bResults = WinHttpSendRequest(hRequest, _
                                              BYVAL %WINHTTP_NO_ADDITIONAL_HEADERS, _
                                              0, _
                                              BYVAL %WINHTTP_NO_REQUEST_DATA, _
                                              0, _
                                              0, _
                                              0)
             END IF
          
             ' End the request.
             IF bResults THEN
                bResults = WinHttpReceiveResponse(hRequest, %NULL)
             END IF
          
             ' Keep checking for data until there is nothing left.
             IF bResults THEN
                DO
                   ' Check for available data.
                   dwSize = 0
                   IF ISFALSE WinHttpQueryDataAvailable(hRequest, dwSize) THEN
                      PRINT "Error " GetLastError " in WinHttpQueryDataAvailable."
                      EXIT DO
                   ELSE
                      ' Allocate space for the buffer.
                      strOutBuffer = STRING$(dwSize + 1, $NUL)
                      ' Read the data.
                      IF ISFALSE WinHttpReadData(hRequest, STRPTR(strOutBuffer), _
                                                 dwSize, dwDownloaded) THEN
                         PRINT "Error " GetLastError " in WinHttpReadData."
                      ELSE
                         STDOUT strOutBuffer
                      END IF
                   END IF
                LOOP WHILE dwSize > 0
             END IF
          
             ' Report any errors.
             IF ISFALSE bResults THEN
                PRINT "Error " GetLastError " has occurred."
             END IF
          
             ' Close open handles.
             IF hRequest THEN WinHttpCloseHandle(hRequest)
             IF hConnect THEN WinHttpCloseHandle(hConnect)
             IF hSession THEN WinHttpCloseHandle(hSession)
          
             WAITKEY$
          
          END FUNCTION
          ' ========================================================================================
          Forum: http://www.jose.it-berater.org/smfforum/index.php

          Comment


          • #6
            WinHttpCrackUrl Function

            This example shows how to break a URL into its components, update a component, then reconstruct the URL.

            Code:
            ' ========================================================================================
            ' This example shows how to break a URL into its components, update a component, then
            ' reconstruct the URL.
            ' ========================================================================================
            
            ' CSED_PBCC - Use the console compiler
            #COMPILE EXE
            #DIM ALL
            #INCLUDE ONCE "windows.inc"
            #INCLUDE ONCE "winhttp.inc"
            #INCLUDE ONCE "objbase.inc"
            
            ' ========================================================================================
            ' Main
            ' ========================================================================================
            FUNCTION PBMAIN () AS LONG
            
               LOCAL urlComp AS URL_COMPONENTSW
               LOCAL wszUrl1 AS WSTRINGZ * 260
               LOCAL pwszUrl2 AS WSTRINGZ PTR
               LOCAL dwUrlLen AS DWORD
               LOCAL wszExtraInfo AS WSTRINGZ * 260
            
               wszUrl1 = "http://search.msn.com/results.asp?RS=CHECKED&FORM=MSNH&v=1&q=wininet"
            
               ' Initialize the URL_COMPONENTS structure.
               urlComp.dwStructSize = SIZEOF(urlComp)
            
               ' Set required component lengths to non-zero so that they are cracked.
               urlComp.dwSchemeLength    = -1
               urlComp.dwHostNameLength  = -1
               urlComp.dwUrlPathLength   = -1
               urlComp.dwExtraInfoLength = -1
            
               ' Crack the URL.
               IF ISFALSE WinHttpCrackUrl(wszUrl1, 0, 0, urlComp) THEN
                  PRINT "Error " GetLastError " in WinHttpCrackUrl."
               ELSE
                  ' Change the search information.
                  ' New info is the same length.
                  wszExtraInfo = "?RS=CHECKED&FORM=MSNH&v=1&q=winhttp"
                  urlComp.lpszExtraInfo = VARPTR(wszExtraInfo)
                  ' Obtain the size of the new URL and allocate memory.
                  WinHttpCreateUrl(urlComp, 0, "", dwUrlLen)
                  pwszUrl2 = CoTaskMemAlloc(dwUrlLen * 2)
                  ' Create a new URL.
                  IF ISFALSE WinHttpCreateUrl(urlComp, 0, BYVAL pwszUrl2, dwUrlLen * 2) THEN
                     PRINT "Error " GetLastError " in WinHttpCreateUrl."
                  ELSE
                     ' Show both URLs.
                     PRINT "Old URL: " wszUrl1
                     PRINT "New URL: " @pwszUrl2
                  END IF
                  CoTaskMemFree pwszUrl2
               END IF
            
               WAITKEY$
            
            END FUNCTION
            ' ========================================================================================
            Forum: http://www.jose.it-berater.org/smfforum/index.php

            Comment


            • #7
              WinHttpCreateUrl Function

              The following example shows how to decompile, or crack, a URL into its subcomponents, update a component, then reconstruct the URL.

              Code:
              ' ========================================================================================
              ' The following example shows how to decompile, or crack, a URL into its subcomponents,
              ' update a component, then reconstruct the URL.
              ' ========================================================================================
              
              ' CSED_PBCC - Use the console compiler
              #COMPILE EXE
              #DIM ALL
              #INCLUDE ONCE "windows.inc"
              #INCLUDE ONCE "winhttp.inc"
              #INCLUDE ONCE "objbase.inc"
              
              ' ========================================================================================
              ' Main
              ' ========================================================================================
              FUNCTION PBMAIN () AS LONG
              
                 LOCAL urlComp AS URL_COMPONENTSW
                 LOCAL wszUrl1 AS WSTRINGZ * 260
                 LOCAL pwszUrl2 AS WSTRINGZ PTR
                 LOCAL dwUrlLen AS DWORD
                 LOCAL wszExtraInfo AS WSTRINGZ * 260
              
                 wszUrl1 = "http://search.msn.com/results.asp?RS=CHECKED&FORM=MSNH&v=1&q=wininet"
              
                 ' Initialize the URL_COMPONENTS structure.
                 urlComp.dwStructSize = SIZEOF(urlComp)
              
                 ' Set required component lengths to non-zero so that they are cracked.
                 urlComp.dwSchemeLength    = -1
                 urlComp.dwHostNameLength  = -1
                 urlComp.dwUrlPathLength   = -1
                 urlComp.dwExtraInfoLength = -1
              
                 ' Crack the URL.
                 IF ISFALSE WinHttpCrackUrl(wszUrl1, 0, 0, urlComp) THEN
                    PRINT "Error " GetLastError " in WinHttpCrackUrl."
                 ELSE
                    ' Change the search information.
                    ' New info is the same length.
                    wszExtraInfo = "?RS=CHECKED&FORM=MSNH&v=1&q=winhttp"
                    urlComp.lpszExtraInfo = VARPTR(wszExtraInfo)
                    ' Obtain the size of the new URL and allocate memory.
                    WinHttpCreateUrl(urlComp, 0, "", dwUrlLen)
                    pwszUrl2 = CoTaskMemAlloc(dwUrlLen * 2)
                    ' Create a new URL.
                    IF ISFALSE WinHttpCreateUrl(urlComp, 0, BYVAL pwszUrl2, dwUrlLen * 2) THEN
                       PRINT "Error " GetLastError " in WinHttpCreateUrl."
                    ELSE
                       ' Show both URLs.
                       PRINT "Old URL:  " wszUrl1
                       PRINT "New URL:  " @pwszUrl2
                    END IF
                    CoTaskMemFree pwszUrl2
                 END IF
              
                 WAITKEY$
              
              END FUNCTION
              ' ========================================================================================
              Forum: http://www.jose.it-berater.org/smfforum/index.php

              Comment


              • #8
                WinHttpOpen Function

                The following example code shows how to retrieve the default connection time-out value.

                Code:
                ' ========================================================================================
                ' The following example code shows how to retrieve the default connection time-out value.
                ' ========================================================================================
                
                ' CSED_PBCC - Use the console compiler
                #COMPILE EXE
                #DIM ALL
                #INCLUDE ONCE "windows.inc"
                #INCLUDE ONCE "winhttp.inc"
                
                ' ========================================================================================
                ' Main
                ' ========================================================================================
                FUNCTION PBMAIN () AS LONG
                
                   LOCAL hSession AS DWORD
                   LOCAL pData AS DWORD
                   LOCAL dwSize AS DWORD
                   LOCAL wszUserAgent AS WSTRINGZ * 260
                
                   dwSize = 4  ' size of a DWORD
                
                   ' Use WinHttpOpen to obtain a session handle.
                   wszUserAgent = "A WinHTTP Example Program/1.0"
                   hSession = WinHttpOpen(wszUserAgent, _
                                          %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                          BYVAL %WINHTTP_NO_PROXY_NAME, _
                                          BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                          0)
                
                   IF hSession THEN
                      ' Use WinHttpQueryOption to retrieve internet options.
                      IF WinHttpQueryOption(hSession, _
                                            %WINHTTP_OPTION_CONNECT_TIMEOUT, _
                                            VARPTR(pdata), _
                                            dwSize) THEN
                         PRINT "Connection timeout: " pdata
                      ELSE
                         PRINT "Error " GetLastError " in WinHttpQueryOption"
                      END IF
                      ' When finished, release the HINTERNET handle.
                      WinHttpCloseHandle(hSession)
                   ELSE
                      PRINT "Error " GetLastError " in in WinHttpOpen."
                   END IF
                
                   ' Close open handles.
                   IF hSession THEN WinHttpCloseHandle(hSession)
                
                   WAITKEY$
                
                END FUNCTION
                ' ========================================================================================
                Forum: http://www.jose.it-berater.org/smfforum/index.php

                Comment


                • #9
                  WinHttpQueryDataAvailable Function

                  The following example shows how to use secure transaction semantics to download a resource from an HTTPS server. The sample code initializes the WinHTTP API, selects a target HTTPS server, and then opens and sends a request for this secure resource. WinHttpQueryDataAvailable is used with the request handle to determine how much data is available for download, then WinHttpReadData is used to read that data. This process repeats until the entire document has been retrieved and displayed.

                  Code:
                  ' ========================================================================================
                  ' The following example shows how to use secure transaction semantics to download a resource
                  ' from an HTTPS server. The sample code initializes the WinHTTP API, selects a target HTTPS
                  ' server, and then opens and sends a request for this secure resource.
                  ' WinHttpQueryDataAvailable is used with the request handle to determine how much data is
                  ' available for download, then WinHttpReadData is used to read that data. This process
                  ' repeats until the entire document has been retrieved and displayed.
                  ' ========================================================================================
                  
                  ' CSED_PBCC - Use the console compiler
                  #COMPILE EXE
                  #DIM ALL
                  #INCLUDE "WIN32API.INC"
                  #INCLUDE "WINHTTP.INC"
                  
                  ' ========================================================================================
                  ' Main
                  ' ========================================================================================
                  FUNCTION PBMAIN () AS LONG
                  
                     LOCAL hSession AS DWORD
                     LOCAL pData AS DWORD
                     LOCAL dwSize AS DWORD
                     LOCAL wszUserAgent AS WSTRINGZ * 260
                  
                     dwSize = 4  ' size of a DWORD
                  
                     ' Use WinHttpOpen to obtain a session handle.
                     wszUserAgent = "A WinHTTP Example Program/1.0"
                     hSession = WinHttpOpen(wszUserAgent, _
                                            %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                            BYVAL %WINHTTP_NO_PROXY_NAME, _
                                            BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                            0)
                  
                     IF hSession THEN
                        ' Use WinHttpQueryOption to retrieve internet options.
                        IF WinHttpQueryOption(hSession, _
                                              %WINHTTP_OPTION_CONNECT_TIMEOUT, _
                                              VARPTR(pdata), _
                                              dwSize) THEN
                           PRINT "Connection timeout: " pdata
                        ELSE
                           PRINT "Error " GetLastError " in WinHttpQueryOption"
                        END IF
                        ' When finished, release the HINTERNET handle.
                        WinHttpCloseHandle(hSession)
                     ELSE
                        PRINT "Error " GetLastError " in in WinHttpOpen."
                     END IF
                  
                     WAITKEY$
                  
                  END FUNCTION
                  ' ========================================================================================
                  Forum: http://www.jose.it-berater.org/smfforum/index.php

                  Comment


                  • #10
                    WinHttpQueryHeaders Function

                    The following example shows how to obtain an HINTERNET handle, open an HTTP session, create and send a request header, and examine the returned response header.

                    Code:
                    ' ========================================================================================
                    ' The following example shows how to obtain an HINTERNET handle, open an HTTP session,
                    ' create and send a request header, and examine the returned response header.
                    ' ========================================================================================
                    
                    ' CSED_PBCC - Use the console compiler
                    #COMPILE EXE
                    #DIM ALL
                    #INCLUDE ONCE "windows.inc"
                    #INCLUDE ONCE "winhttp.inc"
                    #INCLUDE ONCE "objbase.inc"
                    
                    ' ========================================================================================
                    ' Main
                    ' ========================================================================================
                    FUNCTION PBMAIN () AS LONG
                    
                       LOCAL dwSize AS DWORD
                       LOCAL dwStatusCode AS DWORD
                       LOCAL bResults AS LONG
                       LOCAL hSession AS DWORD
                       LOCAL hConnect AS DWORD
                       LOCAL hRequest AS DWORD
                       LOCAL wszUserAgent AS WSTRINGZ * 260
                       LOCAL wszServerName AS WSTRINGZ * 260
                       LOCAL wszVerb AS WSTRINGZ * 260
                       LOCAL pwszOutBuffer AS WSTRINGZ PTR
                    
                       dwSize = 4  ' size of a DWORD
                    
                       ' Use WinHttpOpen to obtain a session handle.
                       wszUserAgent = "A WinHTTP Example Program/1.0"
                       hSession = WinHttpOpen(wszUserAgent, _
                                              %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                              BYVAL %WINHTTP_NO_PROXY_NAME, _
                                              BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                              0)
                    
                       ' Specify an HTTP server.
                       IF hSession THEN
                          wszServerName = "www.microsoft.com"
                          hConnect = WinHttpConnect(hSession, _
                                                    wszServerName, _
                                                    %INTERNET_DEFAULT_HTTP_PORT, _
                                                    0)
                       END IF
                    
                       ' Create an HTTP Request handle.
                       IF hConnect THEN
                          wszVerb = "GET"
                          hRequest = WinHttpOpenRequest(hConnect, _
                                                        wszVerb, _
                                                        "",  _
                                                        "", _
                                                        BYVAL %WINHTTP_NO_REFERER, _
                                                        BYVAL %WINHTTP_DEFAULT_ACCEPT_TYPES, _
                                                        0)
                       END IF
                    
                       ' Send a Request.
                       IF hRequest THEN
                          bResults = WinHttpSendRequest(hRequest, _
                                                        BYVAL %WINHTTP_NO_ADDITIONAL_HEADERS, _
                                                        0, _
                                                        %WINHTTP_NO_REQUEST_DATA, _
                                                        0, _
                                                        0, _
                                                        0)
                       END IF
                    
                       ' End the request.
                       IF bResults THEN
                          bResults = WinHttpReceiveResponse(hRequest, %NULL)
                       END IF
                    
                       ' First, use WinHttpQueryHeaders to obtain the size of the buffer.
                       IF bResults THEN
                          WinHttpQueryHeaders(hRequest, %WINHTTP_QUERY_RAW_HEADERS_CRLF, _
                                              BYVAL %WINHTTP_HEADER_NAME_BY_INDEX, %NULL, _
                                              dwSize, BYVAL %WINHTTP_NO_HEADER_INDEX)
                       END IF
                    
                       ' Allocate memory for the buffer.
                       IF GetLastError = %ERROR_INSUFFICIENT_BUFFER THEN
                          pwszOutBuffer = CoTaskMemAlloc(dwSize)
                          ' Now, use WinHttpQueryHeaders to retrieve the header.
                          bResults = WinHttpQueryHeaders(hRequest, _
                                                          %WINHTTP_QUERY_RAW_HEADERS_CRLF, _
                                                          BYVAL %WINHTTP_HEADER_NAME_BY_INDEX, _
                                                          pwszOutBuffer, dwSize, _
                                                          BYVAL %WINHTTP_NO_HEADER_INDEX)
                       END IF
                    
                       ' Print the header contents.
                       IF bResults THEN
                          STDOUT "Header contents: "
                          STDOUT @pwszOutBuffer
                          CoTaskMemFree pwszOutBuffer
                       END IF
                    
                       ' Report any errors.
                       IF ISFALSE bResults THEN
                          PRINT "Error " GetLastError " has occurred."
                       END IF
                    
                       ' Close open handles.
                       IF hRequest THEN WinHttpCloseHandle(hRequest)
                       IF hConnect THEN WinHttpCloseHandle(hConnect)
                       IF hSession THEN WinHttpCloseHandle(hSession)
                    
                       WAITKEY$
                    
                    END FUNCTION
                    ' ========================================================================================
                    Forum: http://www.jose.it-berater.org/smfforum/index.php

                    Comment


                    • #11
                      WinHttpQueryOption Function

                      This example demonstrates retrieving the connection time-out value:

                      Code:
                      ' ========================================================================================
                      ' This example demonstrates retrieving the connection time-out value.
                      ' ========================================================================================
                      
                      ' CSED_PBCC - Use the console compiler
                      #COMPILE EXE
                      #DIM ALL
                      #INCLUDE "WIN32API.INC"
                      #INCLUDE "WINHTTP.INC"
                      
                      ' ========================================================================================
                      ' Main
                      ' ========================================================================================
                      FUNCTION PBMAIN () AS LONG
                      
                         LOCAL hSession AS DWORD
                         LOCAL pData AS DWORD
                         LOCAL dwSize AS DWORD
                         LOCAL wszUserAgent AS WSTRINGZ * 260
                      
                         dwSize = 4  ' size of a DWORD
                      
                         ' Use WinHttpOpen to obtain a session handle.
                         wszUserAgent = "A WinHTTP Example Program/1.0"
                         hSession = WinHttpOpen(wszUserAgent, _
                                                %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                                BYVAL %WINHTTP_NO_PROXY_NAME, _
                                                BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                                0)
                      
                         IF hSession THEN
                            ' Use WinHttpQueryOption to retrieve internet options.
                            IF WinHttpQueryOption(hSession, _
                                                  %WINHTTP_OPTION_CONNECT_TIMEOUT, _
                                                  VARPTR(pdata), _
                                                  dwSize) THEN
                               PRINT "Connection timeout: " pdata
                            ELSE
                               PRINT "Error " GetLastError " in WinHttpQueryOption"
                            END IF
                            ' When finished, release the HINTERNET handle.
                            WinHttpCloseHandle(hSession)
                         ELSE
                            PRINT "Error " GetLastError " in in WinHttpOpen."
                         END IF
                      
                         WAITKEY$
                      
                      END FUNCTION
                      ' ========================================================================================
                      Forum: http://www.jose.it-berater.org/smfforum/index.php

                      Comment


                      • #12
                        WinHttpReadData Function

                        The following example shows how to use secure transaction semantics to download a resource from an Secure Hypertext Transfer Protocol (HTTPS) server. The sample code initializes the WinHTTP application programming interface (API), selects a target HTTPS server, then opens and sends a request for this secure resource. WinHttpQueryDataAvailable is used with the request handle to determine how much data is available for download, then WinHttpReadData is used to read that data. This process repeats until the entire document has been retrieved and displayed.

                        Code:
                        ' ========================================================================================
                        ' The following example shows how to use secure transaction semantics to download a resource
                        ' from an HTTPS server. The sample code initializes the WinHTTP API, selects a target HTTPS
                        ' server, and then opens and sends a request for this secure resource.
                        ' WinHttpQueryDataAvailable is used with the request handle to determine how much data is
                        ' available for download, then WinHttpReadData is used to read that data. This process
                        ' repeats until the entire document has been retrieved and displayed.
                        ' ========================================================================================
                        
                        ' CSED_PBCC - Use the console compiler
                        #COMPILE EXE
                        #DIM ALL
                        #INCLUDE "WIN32API.INC"
                        #INCLUDE "WINHTTP.INC"
                        
                        ' ========================================================================================
                        ' Main
                        ' ========================================================================================
                        FUNCTION PBMAIN () AS LONG
                        
                           LOCAL dwSize AS DWORD
                           LOCAL dwDownloaded AS DWORD
                           LOCAL bResults AS LONG
                           LOCAL hSession AS DWORD
                           LOCAL hConnect AS DWORD
                           LOCAL hRequest AS DWORD
                           LOCAL wszUserAgent AS WSTRINGZ * 260
                           LOCAL wszServerName AS WSTRINGZ * 260
                           LOCAL wszVerb AS WSTRINGZ * 260
                           LOCAL strOutBuffer AS STRING
                        
                           dwSize = 4  ' size of a DWORD
                        
                           ' Use WinHttpOpen to obtain a session handle.
                           wszUserAgent ="A WinHTTP Example Program/1.0"
                           hSession = WinHttpOpen(wszUserAgent, _
                                                  %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                                  BYVAL %WINHTTP_NO_PROXY_NAME, _
                                                  BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                                  0)
                        
                           ' Specify an HTTP server.
                           IF hSession THEN
                              wszServerName = "www.microsoft.com"
                              hConnect = WinHttpConnect(hSession, _
                                                        wszServerName, _
                                                        %INTERNET_DEFAULT_HTTP_PORT, _
                                                        0)
                           END IF
                        
                        
                           ' Create an HTTP Request handle.
                           IF hConnect THEN
                              wszVerb = "GET"
                              hRequest = WinHttpOpenRequest(hConnect, _
                                                            wszVerb, _
                                                            BYVAL %NULL,  _
                                                            BYVAL %NULL, _
                                                            BYVAL %WINHTTP_NO_REFERER, _
                                                            BYVAL %WINHTTP_DEFAULT_ACCEPT_TYPES, _
                                                            0)
                           END IF
                        
                           ' Send a Request.
                           ' Note: The Microsoft C example uses WINHTTP_FLAG_SECURE for the last
                           ' parameter, but I have changed it to 0 because, otherwise, it returns
                           ' error 12175 (ERROR_WINHTTP_SECURE_FAILURE)
                           IF hRequest THEN
                              bResults = WinHttpSendRequest(hRequest, _
                                                            BYVAL %WINHTTP_NO_ADDITIONAL_HEADERS, _
                                                            0, _
                                                            %WINHTTP_NO_REQUEST_DATA, _
                                                            0, _
                                                            0, _
                                                            0)
                           END IF
                        
                           ' End the request.
                           IF bResults THEN
                              bResults = WinHttpReceiveResponse(hRequest, %NULL)
                           END IF
                        
                           ' Keep checking for data until there is nothing left.
                           IF bResults THEN
                              DO
                                 ' Check for available data.
                                 dwSize = 0
                                 IF ISFALSE WinHttpQueryDataAvailable(hRequest, dwSize) THEN
                                    PRINT "Error " GetLastError " in WinHttpQueryDataAvailable."
                                    EXIT DO
                                 ELSE
                                    ' Allocate space for the buffer.
                                    strOutBuffer = STRING$(dwSize + 1, $NUL)
                                    ' Read the data.
                                    IF ISFALSE WinHttpReadData(hRequest, BYVAL STRPTR(strOutBuffer), _
                                                               dwSize, dwDownloaded) THEN
                                       PRINT "Error " GetLastError " in WinHttpReadData."
                                    ELSE
                                       STDOUT strOutBuffer
                                    END IF
                                 END IF
                              LOOP WHILE dwSize > 0
                           END IF
                        
                           ' Report any errors.
                           IF ISFALSE bResults THEN
                              PRINT "Error " GetLastError " has occurred."
                           END IF
                        
                           ' Close open handles.
                           IF hRequest THEN WinHttpCloseHandle(hRequest)
                           IF hConnect THEN WinHttpCloseHandle(hConnect)
                           IF hSession THEN WinHttpCloseHandle(hSession)
                        
                           WAITKEY$
                        
                        END FUNCTION
                        ' ========================================================================================
                        Forum: http://www.jose.it-berater.org/smfforum/index.php

                        Comment


                        • #13
                          WinHttpSetTimeouts Function

                          This example shows how to set new time-out values using WinHttpSetTimeouts.

                          Code:
                          ' ========================================================================================
                          ' The following example shows you how to retrieve the connection time-out value.
                          ' ========================================================================================
                          
                          ' CSED_PBCC - Use the console compiler
                          #COMPILE EXE
                          #DIM ALL
                          #INCLUDE ONCE "windows.inc"
                          #INCLUDE ONCE "winhttp.inc"
                          
                          ' ========================================================================================
                          ' Main
                          ' ========================================================================================
                          FUNCTION PBMAIN () AS LONG
                          
                             LOCAL hSession AS DWORD
                             LOCAL wszUserAgent AS WSTRINGZ * 260
                          
                             ' Use WinHttpOpen to obtain a session handle.
                             wszUserAgent = "A WinHTTP Example Program/1.0"
                             hSession = WinHttpOpen(wszUserAgent, _
                                                    %WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, _
                                                    BYVAL %WINHTTP_NO_PROXY_NAME, _
                                                    BYVAL %WINHTTP_NO_PROXY_BYPASS, _
                                                    0)
                          
                             IF hSession THEN
                                ' Use WinHttpSetTimeouts to set a new time-out values.
                                IF ISFALSE WinHttpSetTimeouts(hSession, 10000, 10000, 10000, 10000) THEN
                                   PRINT "Error " GetLastError " in WinHttpSetTimeouts."
                                ELSE
                                   PRINT "Timeouts set"
                                END IF
                          
                                ' PLACE ADDITIONAL CODE HERE.
                          
                                ' When finished, release the HINTERNET handle.
                                WinHttpCloseHandle(hSession)
                             ELSE
                                PRINT "Error " GetLastError " in in WinHttpOpen."
                             END IF
                          
                             ' Close open handles.
                             IF hSession THEN WinHttpCloseHandle(hSession)
                          
                             WAITKEY$
                          
                          END FUNCTION
                          ' ========================================================================================
                          Forum: http://www.jose.it-berater.org/smfforum/index.php

                          Comment


                          • #14
                            WinHttpTimeToSystemTime Function

                            This example shows how to convert an HTTP formatted date to a SYSTEMTIME structure.

                            Code:
                            DIM ST AS SYSTEMTIME
                            DIM wszTimeStr AS WSTRINGZ * 260
                            DIM nError AS LONG
                            
                            ' Convert the HTTP string to a SYSTEMTIME structure.
                            wszTimeStr = "Tue, 21 Nov 2000 01:06:53 GMT"
                            IF WinHttpTimeToSystemTime(wszTimeStr, ST) = 0 THEN
                                nError = GetLastError
                                PRINT "Error " nError " in WinHttpTimeToSystemTime."
                            ELSE
                                ' Print the date.
                                PRINT "The U.S. formatted date is " & _
                                      ST.wMonth & "/" & ST.wDay & "/" & ST.wYear
                            END IF
                            Forum: http://www.jose.it-berater.org/smfforum/index.php

                            Comment


                            • #15
                              Very instructive!

                              Comment

                              Working...
                              X