ZetCode

VBScript Abort Method

last modified April 9, 2025

The Abort method in VBScript is used to terminate an asynchronous HTTP request made through XMLHTTP or ServerXMLHTTP objects. It immediately stops the ongoing request and releases associated resources. This method is crucial for managing long-running or stuck HTTP requests in scripts.

Abort helps prevent script hangs when dealing with unreliable network connections. It's typically used in timeout scenarios or user-initiated cancellations. This tutorial covers Abort with practical examples to demonstrate its proper usage.

Abort Method Overview

The Abort method belongs to both XMLHTTP and ServerXMLHTTP objects in VBScript. It terminates any pending asynchronous HTTP request immediately. The method takes no parameters and returns no value.

Key features include immediate request termination and resource cleanup. After calling Abort, the request's readyState becomes 0 (UNSENT). Proper error handling should be implemented when using this method.

Basic Request Abort

This example demonstrates the simplest use of Abort to cancel an HTTP request. It shows how to create an XMLHTTP request and abort it before completion. The script includes basic error handling.

basic_abort.vbs
On Error Resume Next

Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
xmlhttp.Open "GET", "http://example.com/api", True
xmlhttp.Send

' Simulate needing to abort the request
WScript.Sleep 1000
xmlhttp.Abort

If Err.Number <> 0 Then
    WScript.Echo "Error: " & Err.Description
Else
    WScript.Echo "Request aborted successfully"
End If

Set xmlhttp = Nothing

The script creates an asynchronous GET request and aborts it after 1 second. The Abort method stops the request regardless of its current state. Error handling ensures any issues during the process are caught and reported.

Timeout-Based Abort

This example shows how to implement a timeout mechanism using Abort. It cancels the request if it takes too long to complete. This pattern is useful for unreliable network connections.

timeout_abort.vbs
On Error Resume Next

Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
xmlhttp.Open "GET", "http://slow.example.com/api", True
xmlhttp.Send

startTime = Timer
timeout = 5 ' seconds

Do While xmlhttp.readyState < 4
    If Timer - startTime > timeout Then
        xmlhttp.Abort
        WScript.Echo "Request timed out after " & timeout & " seconds"
        Exit Do
    End If
    WScript.Sleep 100
Loop

If xmlhttp.readyState = 4 And xmlhttp.status = 200 Then
    WScript.Echo "Request completed: " & xmlhttp.responseText
End If

Set xmlhttp = Nothing

The script monitors the request's duration and aborts if it exceeds 5 seconds. The loop checks both the elapsed time and request state. This approach prevents indefinite waiting for slow or unresponsive servers.

User-Initiated Abort

This example demonstrates aborting a request based on user input. It shows how to integrate Abort with user interaction. The script uses a simple message box for demonstration.

user_abort.vbs
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
Set wshShell = CreateObject("WScript.Shell")

xmlhttp.Open "GET", "http://example.com/largefile", True
xmlhttp.Send

' Simulate user choosing to cancel
userChoice = wshShell.Popup("Cancel download?", 5, "Download in progress", 4 + 32)

If userChoice = 6 Then ' User clicked Yes
    xmlhttp.Abort
    WScript.Echo "Download cancelled by user"
Else
    WScript.Echo "Download continuing..."
End If

Set xmlhttp = Nothing
Set wshShell = Nothing

The script starts a download and presents a cancellation dialog after 5 seconds. If the user chooses to cancel, Abort terminates the request. This pattern is useful for long-running operations where user control is needed.

Abort in Error Handling

This example shows proper error handling when using Abort. It demonstrates cleaning up resources after an aborted request. The script includes comprehensive error checking.

error_handling.vbs
On Error Resume Next

Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
    WScript.Echo "Error creating object: " & Err.Description
    WScript.Quit 1
End If

xmlhttp.Open "GET", "http://invalid.url", True
xmlhttp.Send

' Simulate needing to abort
WScript.Sleep 2000
xmlhttp.Abort

If Err.Number <> 0 Then
    WScript.Echo "Error during request: " & Err.Description
Else
    WScript.Echo "Request aborted cleanly"
End If

Set xmlhttp = Nothing

The script demonstrates robust error handling around the Abort operation. Each step checks for errors, and resources are properly cleaned up. This approach ensures stability even when requests fail or are cancelled.

Abort with ServerXMLHTTP

This example shows Abort usage with ServerXMLHTTP, which is better suited for server-side scripts. The pattern is similar to XMLHTTP but with server-specific features.

server_abort.vbs
On Error Resume Next

Set serverHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
serverHttp.Open "POST", "http://api.example.com/process", True
serverHttp.SetRequestHeader "Content-Type", "application/json"
serverHttp.Send "{""data"":""value""}"

' Abort if not completed within 3 seconds
startTime = Timer
Do While serverHttp.readyState < 4
    If Timer - startTime > 3 Then
        serverHttp.Abort
        WScript.Echo "Server request timed out"
        Exit Do
    End If
    WScript.Sleep 100
Loop

If serverHttp.readyState = 4 Then
    WScript.Echo "Response: " & serverHttp.responseText
End If

Set serverHttp = Nothing

The script uses ServerXMLHTTP for a POST request with a JSON payload. It implements a timeout that aborts the request after 3 seconds. This example shows the same Abort behavior across different HTTP client objects.

Source

XMLHTTP Documentation

In this article, we have explored the Abort method in VBScript, covering its usage and practical applications. From simple cancellations to complex timeout scenarios, these examples demonstrate reliable HTTP request management. With this knowledge, you can enhance your scripts with proper request cancellation capabilities.

Author

My name is Jan Bodnar and I am a passionate programmer with many years of programming experience. I have been writing programming articles since 2007. So far, I have written over 1400 articles and 8 e-books. I have over eight years of experience in teaching programming.

List all VBScript tutorials.