Sample code for 30+ languages & platforms
AutoIt

HTTP GET -- Read Response from Stream

See more REST Examples

Demonstrates how to send an HTTP GET for a web page, and then read the response from a Stream. The purpose is to fulfill a situation such as the following: "I have a URL and just want the <head> </head> portion of the HTML. This would avoid having to download a potentially enormous web page just to get at header information, such as the <styles>."

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.

$oRest = ObjCreate("Chilkat.Rest")

; In this example, we'll get the web page at http://www.nytimes.com/pages/business/index.html
; The domain is "www.nytimes.com", and the path is "/pages/business/index.html"

; If we have only the full URL to begin with, it can be loaded into the Chilkat URL object to
; access the parts:
$oUrl = ObjCreate("Chilkat.Url")
$oUrl.ParseUrl("http://www.nytimes.com/pages/business/index.html")

Local $bAutoReconnect = True
$bSuccess = $oRest.Connect($oUrl.Host,$oUrl.Port,$oUrl.Ssl,$bAutoReconnect)

; Send the GET request (This sends the GET request, but does not read the response.)
$bSuccess = $oRest.SendReqNoBody("GET",$oUrl.Path)
If ($bSuccess <> True) Then
    ConsoleWrite($oRest.LastErrorText & @CRLF)
    Exit
EndIf

; Read the response header.
Local $iResponseStatusCode = $oRest.ReadResponseHeader()
If ($iResponseStatusCode < 0) Then
    ConsoleWrite($oRest.LastErrorText & @CRLF)
    Exit
EndIf

ConsoleWrite("Response status code = " & $iResponseStatusCode & @CRLF)

; We expect a 200 response status.
If ($iResponseStatusCode <> 200) Then

    ; If the response status code is not 200, we could check for a redirect status code and 
    ; then follow it, read the entire response (as shown here), or just call rest.Disconnect
Local $sErrResponse = $oRest.ReadRespBodyString()
    If ($oRest.LastMethodSuccess <> True) Then
        ConsoleWrite($oRest.LastErrorText & @CRLF)
    Else
        ConsoleWrite($sErrResponse & @CRLF)
    EndIf

    Exit
EndIf

$oBodyStream = ObjCreate("Chilkat.Stream")
; Set a 10 second read timeout for the stream. 
; (Give up if no data arrives within 10 seconds after calling a read method.)
$oBodyStream.ReadTimeoutMs = 10000

; Create a background thread task to read the response body (which feeds
; it to the bodyStream object.)
Local $oReadResponseBodyTask = $oRest.ReadRespBodyStreamAsync($oBodyStream,True)

; Start the task. 
$bSuccess = $oReadResponseBodyTask.Run()

; Read the HTTP response body until the "</head>" is seen, or until
; the end-of-stream is reached.

$oSbBody = ObjCreate("Chilkat.StringBuilder")
Local $bExitLoop = False
While Not $bExitLoop And ($oBodyStream.EndOfStream <> True)

Local $sBodyText = $oBodyStream.ReadString()
    If ($oBodyStream.LastMethodSuccess = True) Then
        $oSbBody.Append($sBodyText)
        If ($oSbBody.Contains("</head>",False)) Then
            $bExitLoop = True
        EndIf

    Else
        $bExitLoop = True
    EndIf

Wend

; Cancel the remainder of the task...
$oReadResponseBodyTask.Cancel()

; Ensure we're disconnected from the server.
Local $iMaxWaitMs = 50
$oRest.Disconnect($iMaxWaitMs)

ConsoleWrite("----" & @CRLF)
ConsoleWrite($oSbBody.GetAsString() & @CRLF)
ConsoleWrite("----" & @CRLF)
ConsoleWrite("Successfully received the body up to the desired point." & @CRLF)