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

使用MSXML.HTTP调用WebAPI时遇Error 429请求过多问题排查

MSXML调用Steam API返回429错误的问题解决

问题背景

使用MSXML2.XMLHTTP.6.0调用Steam库存API时,每次请求都会触发429(请求过多)错误,但将相同URL粘贴到浏览器中能立即获取正常响应。怀疑MSXML请求是从微软集中服务器发出,导致IP被封禁,想确认是否能指定请求IP,以及代理是否是唯一解决办法。已验证API密钥并非该请求必需项,添加后问题依旧。

核心分析

你的猜测错误:MSXML的HTTP请求是从本地机器的IP地址发出的,并非微软集中服务器。429错误的核心原因是MSXML默认请求头与浏览器差异过大,Steam API对非浏览器请求做了频率限制或拦截。

解决方法

1. 补全请求头,模拟浏览器请求

Steam API会校验请求头中的User-Agent、Accept等字段,MSXML默认请求头过于简单,容易被识别为非合法请求。在.send前添加以下请求头设置:

Dim urlAPISteam As String
Dim parametersSteam As String
Dim url As String
Dim clientID As String

clientID = 76561197960361544
urlAPISteam = "https://steamcommunity.com/inventory/"
parametersSteam = clientID & "/730/2?l=english&count=1"
url = urlAPISteam & parametersSteam

With CreateObject("MSXML2.XMLHTTP.6.0")
    .Open "Get", url, False
    ' 添加浏览器风格请求头
    .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    .setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
    .setRequestHeader "Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"
    .send

    'Error Handle
    If .Status <> 200 Then
        MsgBox "Statuscode: " & .Status & " Message: " & .responseText
        Exit Sub
    End If

    Dim response As Collection
    Set response = JsonConverter.ParseJson(.responseText)
End With

2. 检查本地IP的请求频率限制

可能之前的测试请求已导致本地IP被Steam临时限制,而浏览器因缓存或已建立会话能正常返回结果。可暂停一段时间后再测试,或更换网络环境验证。

3. 关于指定请求IP

MSXML本身无直接指定请求IP的属性。若本地有多网卡/多IP,可通过系统路由配置或使用WinHTTP组件(支持绑定特定IP)实现,但操作复杂度较高,优先尝试前两种方法。

4. 代理并非唯一解决途径

补全请求头是最直接有效的解决方式,仅当前两种方法无效时,再考虑使用代理方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:24:53