Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) HTTP GET -- Read Response from StreamDemonstrates 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>."
Use ChilkatAx-win32.pkg Procedure Test Handle hoRest Handle hoUrl Boolean iSuccess Boolean iBAutoReconnect Boolean iSuccess Integer iResponseStatusCode String sErrResponse Variant vBodyStream Handle hoBodyStream Variant vReadResponseBodyTask Handle hoReadResponseBodyTask Handle hoSbBody Boolean iExitLoop String sBodyText Integer iMaxWaitMs String sTemp1 Integer iTemp1 Boolean bTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatRest)) To hoRest If (Not(IsComObjectCreated(hoRest))) Begin Send CreateComObject of hoRest End // 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: Get Create (RefClass(cComChilkatUrl)) To hoUrl If (Not(IsComObjectCreated(hoUrl))) Begin Send CreateComObject of hoUrl End Get ComParseUrl Of hoUrl "http://www.nytimes.com/pages/business/index.html" To iSuccess Move True To iBAutoReconnect Get ComHost Of hoUrl To sTemp1 Get ComPort Of hoUrl To iTemp1 Get ComSsl Of hoUrl To bTemp1 Get ComConnect Of hoRest sTemp1 iTemp1 bTemp1 iBAutoReconnect To iSuccess // Send the GET request (This sends the GET request, but does not read the response.) Get ComPath Of hoUrl To sTemp1 Get ComSendReqNoBody Of hoRest "GET" sTemp1 To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoRest To sTemp1 Showln sTemp1 Procedure_Return End // Read the response header. Get ComReadResponseHeader Of hoRest To iResponseStatusCode If (iResponseStatusCode < 0) Begin Get ComLastErrorText Of hoRest To sTemp1 Showln sTemp1 Procedure_Return End Showln "Response status code = " iResponseStatusCode // We expect a 200 response status. If (iResponseStatusCode <> 200) Begin // 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 Get ComReadRespBodyString Of hoRest To sErrResponse Get ComLastMethodSuccess Of hoRest To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoRest To sTemp1 Showln sTemp1 End Else Begin Showln sErrResponse End Procedure_Return End Get Create (RefClass(cComChilkatStream)) To hoBodyStream If (Not(IsComObjectCreated(hoBodyStream))) Begin Send CreateComObject of hoBodyStream End // Set a 10 second read timeout for the stream. // (Give up if no data arrives within 10 seconds after calling a read method.) Set ComReadTimeoutMs Of hoBodyStream To 10000 // Create a background thread task to read the response body (which feeds // it to the bodyStream object.) Get pvComObject of hoBodyStream to vBodyStream Get ComReadRespBodyStreamAsync Of hoRest vBodyStream True To vReadResponseBodyTask If (IsComObject(vReadResponseBodyTask)) Begin Get Create (RefClass(cComChilkatTask)) To hoReadResponseBodyTask Set pvComObject Of hoReadResponseBodyTask To vReadResponseBodyTask End // Start the task. Get ComRun Of hoReadResponseBodyTask To iSuccess // Read the HTTP response body until the "</head>" is seen, or until // the end-of-stream is reached. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbBody If (Not(IsComObjectCreated(hoSbBody))) Begin Send CreateComObject of hoSbBody End Move False To iExitLoop While (Not iExitLoop And ((ComEndOfStream(hoBodyStream)) <> True)) Get ComReadString Of hoBodyStream To sBodyText Get ComLastMethodSuccess Of hoBodyStream To bTemp1 If (bTemp1 = True) Begin Get ComAppend Of hoSbBody sBodyText To iSuccess Get ComContains Of hoSbBody "</head>" False To bTemp1 If (bTemp1) Begin Move True To iExitLoop End End Else Begin Move True To iExitLoop End Loop // Cancel the remainder of the task... Get ComCancel Of hoReadResponseBodyTask To iSuccess Send Destroy of hoReadResponseBodyTask // Ensure we're disconnected from the server. Move 50 To iMaxWaitMs Get ComDisconnect Of hoRest iMaxWaitMs To iSuccess Showln "----" Get ComGetAsString Of hoSbBody To sTemp1 Showln sTemp1 Showln "----" Showln "Successfully received the body up to the desired point." End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.