You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UFT中VBScript发送GET请求遇400错误:如何生成动态Timestamp或获取请求头

解决UFT(VBScript)中动态生成HTTP请求Timestamp的问题

首先,你遇到的核心问题是需要在VBScript中生成和Postman前置脚本pm.environment.set("hmacCreationTime", new Date().getTime());等价的动态时间戳——也就是当前时间距离1970年1月1日00:00:00的毫秒数。另外你提到用getAllResponseHeaders拿不到timestamp,是因为这个方法获取的是服务器返回的响应头,而timestamp是你需要主动发送的请求头,所以不需要从响应里读取,而是要自己生成后添加到请求中。

1. 在VBScript中生成动态毫秒级时间戳

Postman里的new Date().getTime()返回的是毫秒级的Unix时间戳,VBScript没有直接的方法,但可以通过计算当前时间与Unix纪元(1970-01-01 00:00:00)的时间差来实现。以下是实现函数:

Function GetUnixTimestampMs()
    Dim epoch, currentTime, timeDiff
    ' 定义Unix纪元时间(UTC)
    epoch = DateAdd("s", 0, "01/01/1970 00:00:00")
    ' 获取当前UTC时间
    currentTime = Now()
    ' 计算时间差(毫秒)
    timeDiff = DateDiff("s", epoch, currentTime) * 1000
    ' 加上当前时间的毫秒部分
    timeDiff = timeDiff + (Timer() - Int(Timer())) * 1000
    ' 取整得到最终的毫秒时间戳
    GetUnixTimestampMs = CInt(timeDiff)
End Function

2. 修改你的UFT脚本,使用动态时间戳

把你硬编码的timestamp请求头替换成上面函数生成的值,修改后的完整代码如下:

strWebServiceURL = "https://demo.com/customer/account/v1/auth/getauthtoken"
Set oWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
oWinHttp.SetTimeouts 0, 360000, 360000, 360000
'Open a HTTP connection to a HTTP resource
oWinHttp.Open "GET", strWebServiceURL, False

' 生成动态毫秒级时间戳并设置请求头
Dim dynamicTimestamp
dynamicTimestamp = GetUnixTimestampMs()
oWinHttp.SetRequestHeader "timestamp", CStr(dynamicTimestamp)

oWinHttp.SetRequestHeader "clientId","clientId"
oWinHttp.SetRequestHeader "User-Agent","neoload"

'Send a HTTP request to the HTTP server with the header and body info
oWinHttp.Send
oWinHttp.WaitForResponse
'Get response
getRestRequest = oWinHttp.ResponseText
Set oWinHttp = Nothing

' 时间戳生成函数
Function GetUnixTimestampMs()
    Dim epoch, currentTime, timeDiff
    epoch = DateAdd("s", 0, "01/01/1970 00:00:00")
    currentTime = Now()
    timeDiff = DateDiff("s", epoch, currentTime) * 1000
    timeDiff = timeDiff + (Timer() - Int(Timer())) * 1000
    GetUnixTimestampMs = CInt(timeDiff)
End Function

3. 额外注意事项

  • 确保你的本地时间与服务器时间同步:很多接口的timestamp验证会要求时间差在一定范围内(比如5分钟),如果本地时间偏差太大,可能会导致验证失败。
  • 如果接口要求的是UTC时间,上面的函数已经使用了UTC时间计算,无需额外调整;如果要求的是本地时间,可根据时区偏移调整currentTime的取值。

内容的提问来源于stack exchange,提问作者gokul9677

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:57:01